2012-10-23 35 views
0

我試圖將當前時間轉換爲中央標準時間。使用Mono和.NET,這兩者都可以工作。MonoDroid和TimeZoneInfo.ConvertTime

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"); 
TimeZoneInfo.ConvertTime(DateTime.UtcNow, cst); 
TimeZoneInfo.ConvertTime(DateTime.Now, cst); 

隨着MonoDroid的3.0.4,第一個給這個錯誤:

Unhandled Exception: 
System.ArgumentException: Kind propery of dateTime is Utc but the sourceTimeZone does not equal TimeZoneInfo.Utc 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 

和第二給出了這樣的錯誤:

Unhandled Exception: 
System.ArgumentNullException: Argument cannot be null. 
Parameter name: destinationTimeZone 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo  sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 

同樣的問題與TimeZoneInfo.ConvertTimeBySystemTimeZoneId。

無論如何要獲取與MonoDroid不同時區的當前時間?

回答

2

一個可能的解決方法是自行調用三參數版本:

var zoned = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Utc, cst); 

編輯:FindSystemTimeZoneById應該拋出TimeZoneNotFoundException,如果它沒有找到您感興趣的區域,但我不知道無論在這種情況下,它只是返回null

這有可能是在MonoDroid的時區ID是TZDB的,在這種情況下,你可以嘗試使用:

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("America/Chicago"); 
+0

同樣的問題,System.ArgumentNullException:參數不能爲空。 參數名稱:destinationTimeZone 我想我已經嘗試了ConvertTime和ConvertTimeBySystemZoneId的每個版本 – cuda

+0

@cuda:可能是個愚蠢的問題 - 你確認'cst'是非空嗎? (請參閱我的編輯建議...) –

+0

是的,它是空的。這個,從來沒有發生過我。謝謝!使用「美國/芝加哥」的 – cuda