2010-05-01 47 views
2

我正在研究一个asp.net mvc应用程序。每个用户都有自己的时区。如何在.Net应用程序中使用区域时区?

现在,我使用“TimeZoneInfo.GetSystemTimeZones”来生成一个下拉列表,以便用户选择一个时区,这是我保存在我的分贝
他们就是这样的:
摩洛哥标准时间(00:00:00)
UTC(00:00:00)
GMT标准时间(00:00:00)
...

我知道PHP中使用不同的时区设置,他们是“地区时区”,例如:
欧洲/巴黎
欧洲/伦敦
...

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

此外,“TimeZoneInfo.GetSystemTimeZones”列出了机器上的所有时区。在Windows服务器,Windows Vista,Windows XP的列表不同?

希望这是有意义的,谢谢你们

+0

你在做什么选定的时区?它是否用于在页面某处显示时间? – danish 2010-05-01 16:40:30

+0

将其标记为PHP,因为它不是PHP的问题。 – mattbasta 2010-05-01 16:46:50

回答

4

php使用的区域名称架构通常称为Olson数据库。在http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html

>奥尔森DB您可能也有兴趣noda-time(虽然有没有尚未发布) -
你可以找到窗口区(ID)的转换表。 Jon Skeet在200th hanselminutes episode上谈论了它,它也将使用Olson DB。


如果在http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml列表/文件是完整和最新您可以通过

$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; 
}'); 

创建PHP一个简单的转换功能,这将创建/覆盖文件zoneconvert.php暴露功能windowszone2olson($winzone)。你也可以在.net端做更多或更少的事情(这可能是更好的地方)。

1

我会用这种方法最初填充时区表的数据,从收集每次不拉。如果事情发生了变化,您可能会意外地更改每个人在稍后的某个时间点使用的ID。您也不必担心OS之间的潜在差异。

2

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

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

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

相关问题