【发布时间】:2013-01-19 14:13:53
【问题描述】:
当我在电脑上(在模拟器上测试时)或手机上(直接在手机上测试时)更改时区时,DateTime.ToLocalTime() 不会返回更新的结果。
我注册并成功接收UIApplication.Notifications.ObserveSignificantTimeChange 的通知事件。在其中我调用TimeZoneInfo.ClearCachedData(),它允许我检测到时区实际上已经改变,但这对ToLocalTime() 没有影响。我正在转换的 DateTime 绝对是 Utc 类型的(例如尝试过 DateTime.UtcNow)。
我尝试按照以下问题的建议致电CultureInfo.CurrentCulture.ClearCachedData():SetTimeZoneInformation does not update DateTime.Now for another .NET Application。这只会在 CurrentCulture 为空时导致应用程序崩溃。
再深入一点ToLocalTime()的实现,好像使用了TimeZone.CurrentTimeZone这个对象。仅当DateTime.GetNow() 和TimeZone.timezone_check 之间存在差异时才会重置此对象。我怀疑TimeZone.timezone_check 在调用TimeZoneInfo.ClearCachedData() 时没有得到更新。
有什么办法可以强制ToLocalTime() 考虑时区变化?
【问题讨论】:
标签: ios datetime xamarin.ios