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