为时区敏感应用程序存储DateTimeOffset

问题描述

| 如果我使用DateTimeOffset存储所有日期,是否仍需要始终将日期转换为UTC,还是仅使用DateTimeOffset效率高?     

解决方法

        答案是-这取决于。 “ 0”是时间戳+ UTC偏移。问题在于,多个时区可以共享相同的偏移量,但它们可能不共享相同的夏令时规则(此外),并且由于since0ѭ没有任何TimeZone的概念,因此会导致歧义。但是,如果您要存储服务器端的时间戳记(可能不会显示给用户并且用户没有交互作用),那可能会很好。我猜可能是服务器端日志记录的一个例子。 恕我直言,在处理用户输入,用户可见,用户可查询等时间戳时,最安全的方法是存储2s并存储完整的时区信息。您可以使用
TimeZoneInfo.Serialize(...)
,它将完整的时区信息输出为字符串并将其保留在数据库中,然后您可以稍后通过
TimeZoneInfo.Deserialize(...)
将其反序列化为TimeZoneInfo实例,并用于将
DateTime
转换为本地/ utc日期时间。这是安全的,因为没有歧义,而且即使时区发生了变化(而且时区也发生了变化,例如DST发生了变化),您的数据仍然保持一致。当然,您将需要更新数据库以使其保持同步(非常罕见)。 通过上述方法,您可以将DateTimes保存为UTC或Local,并且必须根据使用情况决定选择哪一个。在UTC中存储日期和时间时,一件有趣的事情是,用户的“今天”的概念变得稍微复杂了一些-您可以在我的博客上阅读该内容。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...