【发布时间】:2019-03-07 14:13:07
【问题描述】:
我正在使用 Noda Time 在 Xamarin Forms 中获取设备上的本地时区。我们使用下面的代码来返回它。
NodaTime.DateTimeZoneProviders.Tzdb.GetSystemDefault().Id;
但是,如果您将手机的位置设置为美国西海岸的任何地方,它会返回“America/Tijuana”。这给我们带来了一个问题,如果它在您的位置设置为 L.A. 时返回类似“America/Los_Angeles”(这是一个有效的 Id)之类的内容,将会得到解决。
有什么想法吗?如何让图书馆返回更准确的 ID?
【问题讨论】:
-
哪款手机,操作系统,手机的时区设置是什么?
-
请注意,
America/Tijuana也是有效时区,但适用于墨西哥。 -
另外,
TimeZoneInfo.Local.Id在此手机上返回什么?它是否返回"America/Tijuana"?还是返回"Local"? -
(如果您有兴趣,可以深入了解starting here 的源代码以查看遵循的代码路径。我的猜测是您的环境返回“Local”,因此沿着@ 987654329@ 路径。)
-
所以,它返回“本地”证实了我的猜测。 NodaTime 无法直接解决这个问题。它所能做的最好的就是猜测。为了获得更好的结果,您可能需要使用本机特定于平台的 API。我没有做很多 Xamrin 的东西,所以试试这个,让我知道 - 但是你有没有可能在 iOS 上使用
Foundation.NSTimeZone.LocalTimeZone的.Name属性或者Java.Util.TimeZone.Default的.ID属性在安卓上?
标签: c# xamarin timezone nodatime