2012-09-15 41 views
7

我有從Web服務處理數據的MonoTouch應用程序。此數據包含特定於時區的日期信息。時區是UTC +12,用於新西蘭。獲取DateTime.Now爲特定的時區而不管設備的時區?

我的應用程序根據當前時間顯示此數據。問題在於,當應用程序在不同時區使用時,數據顯示不正確,因爲設備上的當前時間不正確。

無論設備上的語言環境/時區設置如何獲取UTC +12的當前日期時間?

編輯:

我曾嘗試基於下面的答案下面的代碼:

TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Pacific/Auckland")); 

此代碼的工作在我的電腦上罰款但是當我運行它在MonoTouch中,我得到以下異常:

System.ArgumentException: Kind propery of dateTime is Local but the sourceTimeZone does not equal TimeZoneInfo.Local 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00018] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:179 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:173 
+0

以DateTime.UtcNow開頭? –

+0

@lanks:發生了什麼?你爲什麼不去除你的答案。這不是你想要的嗎? –

+0

@Nickhil Agrawal對不起,但經過測試你的答案它沒有奏效。我用代碼和例外更新了我的問題。 – startupsmith

回答

3

這是MonoTouch中的bug

該修復程序將包含在MonoTouch的未​​來版本中(我不確切知道哪些內容)。

無論如何已經有a hotfix可用。

20

使用DateTime.Now。這會給你係統TimeZone日期和時間。現在,時間轉換爲所需的時區的時間是這樣

var indianTime = TimeZoneInfo.ConvertTime (DateTime.Now, 
       TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")); 

要獲得TimeZone的列表運行此方法

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones(); 
Console.WriteLine("The local system has the following {0} time zones", zones.Count); 
foreach (TimeZoneInfo zone in zones) 
    Console.WriteLine(zone.Id); 
+3

MSFT時區列表:https://msdn.microsoft.com/en-us/library/ms912391(v=winembedded.11).aspx – RJB

10

你可以不喜歡它:

Datetime date = TimeZoneInfo.ConvertTime(utcDateTime, timeZone); 

只是通過給定參數。

相關問題