ios - MonoTouch DateTime.ToLocalTime 在时区更改时不更新

标签 ios datetime xamarin.ios

当我在计算机上(在模拟器上测试时)或手机上(直接在手机上测试时)更改时区时,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_checkTimeZoneInfo.ClearCachedData() 被调用时没有得到更新。

有什么方法可以强制 ToLocalTime() 考虑时区变化?

最佳答案

您可以使用 DateTimeOffset为了这。另见 this question .

编辑 - 我的工作是这样的:

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 都会更改,而不会清除任何缓存。我确实必须重新加载 View ,但没有其他技巧。

要显示/验证本地 TimeZone 我使用:

var localTimeZone = System.TimeZoneInfo.Local.StandardName;

我希望这能以某种方式为您指明正确的方向。我没有比这个“在我的机器上工作”更好的答案了。

关于ios - MonoTouch DateTime.ToLocalTime 在时区更改时不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694201/

相关文章:

vb.net - 日期格式问题

caching - Xamarin iOS 从 WKWebView 清除缓存

ios - 如何清理 Xamarin.iOS 中的 UIViewController?

ios - UIApplication.sharedApplication().keyWindow?.rootViewController 卡住了我的应用程序

ios - 即使内容/压缩设置为 1,图像也会增长

javascript - javascript new Date() 构造函数对相同不同格式字符串的不明确行为

ios - UIRefreshControl 在 Xamarin iOS 上崩溃

ios - 无法将来自 Alamofire GET 请求的 JSON 数据保存到函数的局部变量

ios - CABasicAnimation 不围绕中心缩放

javascript - 将用户输入的确切日期从 Javascript 传递到 .NET