2011-09-27 70 views
2

我想在不使用註冊表或更改操作系統時區的情況下更改.NET CLR的默認時區。有沒有辦法?在不使用註冊表的情況下更改.NET CLR時區

編輯:它看起來像.NET CLR不支持具有不同於操作系統的默認時區(不同於JVM)。

換句話說,我想這個語句返回其他的東西比我的操作系統時區:

TimeZoneInfo timeZoneInfo = TimeZoneInfo.Local; 
Console.Out.WriteLine("timeZoneInfo = {0}", timeZoneInfo); 

我想要做的,這是與時間運行.NET GUI的原因我的用戶區(倫敦),而不是我機器的時區(芝加哥)。

例如,您可以通過添加到命令行更改Java運行時的時區:

-Duser.timezone="Europe/Berlin" 

因此,舉例來說,如果你想DateTime.Now返回不同的時區,你不能而無需將所有對DateTime.Now的引用都更改爲其他內容,這正是我希望首先避免的。

+0

CLR是什麼意思? CLR是* runtime *。 –

+0

如果你不想在本地時區,不使用'TimeZoneInfo.Local' ...的【如何改變Windows2k8與.NET中的時區設置] –

+0

可能重複(http://stackoverflow.com /問題/ 3408055 /如何對變化的,時區設定-的-windows2k8-與網) – Aamir

回答

1

您在詢問有關獲取時區設置的不同結果,但我最終假設您有興趣在默認情況下獲取其他時區返回的時間。

.NET框架支持UTC,本地以及一個沒有時區感的通用時間值。請參閱DateTimeKind枚舉。

在處理時間值時,我通常在內部對所有東西都使用UTC,並在與用戶交互時將其轉換爲特定區域。

因此,要回答您的問題,我知道在另一個時區返回本地時間的唯一方法是更改​​機器的時區。

這開始說,爲了得到您想要的效果,您可以編寫一個實用類,以UTC獲取時間,然後使用配置參數在返回之前存儲要應用的偏移量。

+0

這不是一個好主意,原因有兩個:a)它可能會影響正在運行的其他進程;你不能把它限制在你的過程中(想象一下IIS上的DateTime.Now和同一臺機器上的SQL Server中的getdate()); b)它只考慮當前時間的時區信息;時區規則會隨着時間而改變,因此時區信息實際上是您希望查看其時區信息的日期的函數。 – casperOne

+0

@casperOne - 是的,我知道這不是一個好主意,但它是我知道可以完成的唯一方法。 –

+0

參見[我的回答(http://stackoverflow.com/questions/7568864/change-net-clr-time-zone-without-using-registry/7569086#7569086)的替代品;我用[tz數據庫](http://www.twinsun.com/tz/tz-link.htm)處理時區信息並忽略了['TimeZone' class](http:// msdn.microsoft.com/en-us/library/system.timezone.aspx)現在已經有好幾年了。 – casperOne

0

您不應依賴CLR /框架爲您提供時區信息,而應該依靠外部信息來源來處理時區。

我推薦使用public info time zone database(也稱爲tz or Olson database)。儘管它沒有聲稱具有100%的準確性,但我發現它對於我需要使用的任何東西都是準確的。

有.NET類可以解析這個數據庫,即ZoneInfo (tz database/Olson database) .NET API。請注意,沒有二進制發行版,您必須下載latest version並自行編譯。

使用此庫,您可以找到所需的時區(它們在ZoneInfo對象中表示),然後您可以給它一個DateTime以對其執行各種功能(如get the UTC在當天抵消,獲得當前的本地時間,UTC時間等)。

注意,這比比較準確。NET API IMO,因爲它要求您提供一個日期以獲取時區信息;各個地區已經改變了有關UTC抵消的規則,並且tz數據庫和ZoneInfo API在表示歷史和準確產生結果方面做得很好。

不要擔心有沒有被2009年以來在API中的任何變化;在寫這篇文章的時候,它目前解析所有的最新數據distrubition的文件(其實我跑了反對ftp://elsie.nci.nih.gov/pub/tzdata2011k.tar.gz文件於2011年9月25日 - 2017年三月,你會從ftp://ftp.iana.org/tz/releases/tzdata2017a.tar.gz檢索)。

相關問題