2012-04-16 22 views
2

在MonoTouch上使用TimeZoneInfo.Local.Id時,我得到CET(用於中歐時間)。在ASP.NET上,我得到了Central Europe Standard TimeMonoTouch和.NET上的TimeZoneInfo不匹配

我需要從iOS設備(MonoTouch)傳輸時區到我的ASP.NET Web服務。僅傳送時區差(UTC +1)是不夠的,因爲這不符合國家特定的夏令時設置。

什麼是最好的方式讓iPhone的時區到我的網絡服務?

回答

4

MonoTouch內部有多個時區數據源。

一個來自.NET基類庫(BCL),System.TimeZoneInfo,它意味着與Microsoft .NET實現兼容(它的結構,而不是數據)。它有兩個缺點。

  • 它與MS數據不是100%兼容的(使用不同的數據源);

  • 無法使用更新的MonoTouch重新構建應用程序,無法更新它;

另一個是MonoTouch.Foundation.NSTimeZone它們綁定到iOS API。該API有點不同,但它返回的數據與其他iOS應用程序將使用的數據相匹配,並且將會更新(使用iOS更新)。

什麼是最好的方式讓iPhone的時區到我的網絡服務?

IMO MonoTouch.Foundation.NSTimeZone更適合上述原因。

僅僅傳輸時區差(UTC +1)是不夠的,因爲這不符合國家特定的夏令時設置。

至於你的偏移量UTC你可以得到日光特定偏移量(以秒爲單位)與:

var dlo = NSTimeZone.LocalTimeZone.DaylightSavingTimeOffset (NSDate.Now); 
+0

謝謝你,我會嘗試NSTimeZone類。關於DST,僅僅是我目前的** DST抵消是不夠的,我需要完整的時區。否則,由於DST切換日期不同,我無法在將來計算用戶的DST偏移量。 – cheeesus 2012-04-16 13:31:24

+0

'NSTimeZone'還有更多API可用,請參閱:http://api.xamarin.com/?link=T%3aMonoTouch.Foundation.NSTimeZone – poupou 2012-04-16 13:34:38

1

由於設備是不同的 - 我會看看導出兩者之間的映射。

很可能您的Monotouch應用程序應該這樣做 - 對於可用時區中列出的每個TimeZoneInfo標識,存儲映射到服務器上同一個TimeZoneInfo的標識。

此外,要知道在服務器上的時區由Windows Update驅動,不一定是每一個Web服務器上相同的(如果你有一個農場) - 因爲我發現我的significnat煩惱那天上的一個我的網絡應用。欲瞭解更多信息:http://support.microsoft.com/gp/cp_dst

1

TimeZoneInfo在Windows上使用Windows時區ID - 而大概在MonoTouch上它將使用任何iOS ID(雖然我有點驚訝,你得到CET,而不是一個zoneinfo名稱)。

即使你在兩者之間進行映射,我也不會總是期望得到相同的結果。 Windows會在不同的時間更新iOS的時區信息。您應該在執行單個系統上的所有時區計算,在兩個地方使用您自己的「嵌入式」時區實現以確保一致性。我的Noda Time項目可能在這裏工作,但我從來沒有嘗試過在MonoTouch中使用它。