从TimeZoneInfo.Local.StandardName获取UTC偏移量

时间:2018-10-02 13:59:23

标签: c# ios xamarin

我正在使用Xamarin开发适用于ios的应用程序,该应用程序已在全世界(目前在美国,欧洲和非洲使用)。

此应用将注册数据发送到服务器,用户希望查看本地化数据进行注册的时间。

所以我想将DateTime.UtcNow和时区名称一起存储在数据库中,所以我使用了TimeZoneInfo.Local.StandardName,并认为我将使用这两个字段来显示本地化为的utc datetime时区,但是我遇到了一些问题。

如何从此“ StandardName”中获取时区偏移,这些是我在iOS上从Xamarin获得的一些值:“ CET”,“ WAT”(我认为是刚果),“ EST”和“ +0545” (这是什么??)

或者,我应该存储偏移量,我认为应该很容易在每个设备上获取偏移量吗?

1 个答案:

答案 0 :(得分:5)

如果您需要存储时区ID,请存储TimeZoneInfo.Id,而不要存储StandardName。我希望任何基于Unix的系统上的时区ID看起来都像“欧洲/伦敦”等。(这是IANA time zone ID格式。)

然后您应该可以使用TimeZoneInfo.FindSystemTimeZoneById重新获得时区。但是请注意,如果您尝试在Windows上通过IANA ID来获取时区,在Unix上通过Windows ID来获取时区,则将不会起作用。如果这是一个问题,您可能要考虑在各处使用一致的时区数据库,可能使用我的Noda Time project,该数据库随附IANA数据库。然后,您可以在Unix和Windows计算机上使用它。

如果是针对当前或过去的事件,则可以存储偏移量。将其存储为 future 事件很有风险,因为这意味着如果时区规则更改,您将无法采取措施。即使在这里存储UTC值和时区ID也可能会有风险:如果您要表示“ 2025年2月1日,巴黎上午9点”,那么您可能想存储确切地信息,而不是“我目前预测的UTC时间将映射到巴黎的上午9点。”