2016-01-27 122 views
3

如果我在C#控制檯應用程序中執行此代碼,它工作正常。TimeZoneInfo.FindSystemTimeZoneById()在Unity應用程序中拋出異常

TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
Console.WriteLine(easternZone.DisplayName); 

然而,當我用同樣的方法在Unity應用,將拋出一個異常:

System.TimeZoneNotFoundException: Exception of type 'System.TimeZoneNotFoundException' was thrown. 
    at System.TimeZoneInfo.FindSystemTimeZoneByFileName (System.String id, System.String filepath) [0x00000] in <filename unknown>:0 
    at System.TimeZoneInfo.FindSystemTimeZoneById (System.String id) [0x00000] in <filename unknown>:0 
    ... 

我注意到一個奇怪的是,異常在一個名爲方法拋出當MSDN文檔明確指出從註冊表中檢索信息時,「FindSystemTimeZoneByFileName」。

回答

7

Unity應用程序使用Mono,並且可以定位非Windows系統 - 因此註冊表信息並不總是可用。看起來,Mono將使用系統上可用的任何時區信息,無論這種情況是Windows時區還是IANA時區 - 因此,您可能需要檢查一個或另一個,或兩者:

TimeZoneInfo easternZone; 

try 
{ 
    easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
} 
catch (TimeZoneNotFoundException) 
{ 
    easternZone = TimeZoneInfo.FindSystemTimeZoneById("America/New_York"); 
} 

當然,如果您通常要在非Windows平臺上運行,則可以將這些方法反轉。如果兩者都找不到,那麼它仍會拋出異常。您可以評論the list of IANA time zones here。您也可以閱讀the timezone tag wiki以瞭解區別。

+0

非常感謝您的快速回答以及您提供的鏈接。我非常有信心它能解決問題,但不幸的是它沒有。事實上,我意識到我甚至無法使用'TimeZoneInfo.GetSystemTimeZones()'獲得可用時區的列表。我想這個問題不僅僅在Mono上,而且與Unity或者我們在項目中使用的任何其他庫有關。我會繼續挖掘, –

+1

我已經在這個問題上投入了更多時間,並且發現,實際上,這是一個Unity錯誤,正如這裏所報道的:https://issuetracker.unity3d.com/issues/win-system- dot-timezoneinfo-does-not-return-any-time-zones –

+0

感謝您的跟進。讓我們知道他們是否修復它。 :) –

相關問題