[英]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.