簡體   English   中英

更改時區時,MonoTouch DateTime.ToLocalTime不會更新

[英]MonoTouch DateTime.ToLocalTime does not update when time zone is changed

當我更改計算機上的時區(在模擬器上測試時)或手機上(直接在手機上測試時)時, DateTime.ToLocalTime()不會返回更新的結果。

我注冊並成功接收UIApplication.Notifications.ObserveSignificantTimeChange通知事件。 在其中,我調用TimeZoneInfo.ClearCachedData() ,它允許我檢測時區實際上已更改,但這對ToLocalTime()沒有影響。 我正在轉換的DateTime絕對是一種Utc(例如試過DateTime.UtcNow )。

我嘗試按照此問題中的建議調用CultureInfo.CurrentCulture.ClearCachedData()SetTimeZoneInformation不會更新另一個.NET應用程序的DateTime.Now 這只會導致應用程序在CurrentCulture被清空時崩潰。

深入研究ToLocalTime()的實現,似乎使用了TimeZone.CurrentTimeZone對象。 僅當DateTime.GetNow()TimeZone.timezone_check之間的差異時才重置此對象。 我懷疑TimeZone.timezone_check在未得到更新TimeZoneInfo.ClearCachedData()被調用。

有什么方法可以強制ToLocalTime()考慮時區變化嗎?

您可以使用DateTimeOffset 另見這個問題

編輯 - 我的工作是:

var dateTimeUtc = new System.DateTime(2013, 2, 4, 21, 30, 0, 
                                        System.DateTimeKind.Utc);
var dateTimeOffsetLocal = new System.DateTimeOffset(dateTimeUtc.ToLocalTime());
var formattedLocalTime = string.Format("{0:HH:mm}", dateTimeOffsetLocal);

在我的手機上,每當我更改TimeZone時,我的formattedLocalTime都會改變,而不會清除任何緩存。 我必須重新加載視圖,但沒有其他技巧。

要顯示/驗證我使用的本地TimeZone

var localTimeZone = System.TimeZoneInfo.Local.StandardName;

我希望這能以某種方式指出你正確的方向。 我沒有比這更好的“在我的機器上工作” - anwer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM