2010-05-01 80 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之間的翻譯 - 但我不知道它們有多全面(或最新)。

相關問題