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

Tom*_*mpi 0 c# ios xamarin

我正在使用Xamarin为ios制作应用程序,该应用程序遍布全球(美国,欧洲和非洲).

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

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

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

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

Jon*_*eet 5

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

然后,您应该可以使用再次获取时区TimeZoneInfo.FindSystemTimeZoneById.但请注意,如果您尝试通过Windows上的IANA ID获取时区,或者通过Unix上的Windows ID获取时区,则无法执行此操作.如果这是一个问题,您可能需要考虑在任何地方使用一致的时区数据库,可能使用我的Noda Time项目,该项目附带了IANA数据库.然后,您可以在Unix和Windows计算机上使用它.

如果它适用于当前或过去的事件,则存储偏移量是可以的.将其存储为未来事件是有风险的,因为这意味着如果时区规则发生变化,您将无法采取措施.即使存储UTC值和时区ID也存在风险:如果你想代表"2025年2月1日在巴黎上午9点"那么你可能想要存储这些信息而不是"我当前的UTC时刻"预测将映射到巴黎上午9点".