【问题标题】:How to use Region Time Zone with a .Net application?如何在 .Net 应用程序中使用区域时区?
【发布时间】:2011-02-14 14:14:51
【问题描述】:

我正在开发一个 asp.net mvc 应用程序。每个用户都有自己的时区。

现在,我正在使用“TimeZoneInfo.GetSystemTimeZones”生成一个下拉列表,以便用户选择一个时区,这就是我存储在我的数据库中的内容
他们是这样的:
摩洛哥标准时间 (00:00:00)
UTC (00:00:00)
GMT 标准时间 (00:00:00)
...

我知道 php 使用不同的时区集,它们是“区域时区”,例如:
欧洲/巴黎
欧洲/伦敦
...

我的问题是:有没有办法在 .NET 应用程序中使用区域时区(如 php)?我能想到的唯一方法是将每个 php 区域时区绑定到 .net 时区。

此外,“TimeZoneInfo.GetSystemTimeZones”列出了机器上的所有时区。 windows server、windows vista、windows xp的列表有区别吗?

希望这是有道理的,谢谢大家

【问题讨论】:

  • 您对选定的时区做了什么?是否用于在页面某处显示时间?
  • 取消标记为 PHP,因为这不是 PHP 问题。

标签: c# asp.net timezone


【解决方案1】:

php 使用的区域名称模式通常称为 Olson 数据库。
您可以在 http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html 找到 windows zone (id) -> Olson DB 的转换表

您可能还对noda-time 感兴趣(尽管尚未发布)。 Jon Skeet 在200th hanselminutes episode 上谈了一点,它也将使用 Olson DB。


如果http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml 处的列表/文档是完整且最新的,您可以通过以下方式为 php 创建一个简单的转换函数

$supplementalData = simplexml_load_file('http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml');

$zones = array();
foreach( $supplementalData->windowsZones->mapTimezones->mapZone as $zi ) {
  $zones[ (string)$zi['other'] ] = (string)$zi['type'];
}

file_put_contents('zoneconvert.php', '<?php function windowszone2olson($winzone) {
  static $zi = '.var_export($zones, true).';
  return isset($zi[$winzone]) ? $zi[$winzone] : false;
}');

这将创建/覆盖一个文件zoneconvert.php,它公开了函数windowszone2olson($winzone)。您也可以在 .net 端或多或少地做同样的事情(这可能是更好的地方)。

【讨论】:

    【解决方案2】:

    听起来您在使用 zoneinfo 或 Olson 数据库名称。基本上这些是非 Windows 世界使用的名称 :)

    它们也是Noda Time 通常使用的名称,尽管我们最终也会支持 Windows 名称。不幸的是,Noda Time 还没有准备好生产 - 如果是,它应该是你问题的正确答案:)

    同时,如果您肯定只使用 Windows,我认为存储 Windows 时区 ID 是合理的 - 但请确保使用 Id 属性而不是 StandardName。在网络上 Windows ID 和 Olson ID 之间的翻译 - 但我不知道它们的全面性(或最新性)。

    【讨论】:

      【解决方案3】:

      我会使用该方法最初用数据填充您的时区表,而不是每次都从集合中提取。如果确实发生了变化,您可能会在以后的某个时候意外更改每个人使用的 ID。您也不必担心操作系统之间的任何潜在差异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多