asp.net-mvc - 为时区敏感应用程序存储 DateTimeOffset

标签 asp.net-mvc timezone

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

最佳答案

答案是 - 这取决于情况。

DateTimeOffset是时间戳 + UTC 偏移量。问题是多个时区可以共享相同的偏移量,但它们可能不共享相同的夏令时规则(除其他外),并且自DateTimeOffset以来没有任何时区的概念,这会导致歧义。但是,如果您存储服务器端时间戳,则这可能没问题,这些时间戳不会显示给用户并且用户没有与之交互。我猜这可能是服务器端日志记录的一个例子。

恕我直言,处理用户输入、用户可见、用户可查询等时间戳时最安全的方法是存储 DateTime s 并存储完整的时区信息。您可以使用TimeZoneInfo.Serialize(...) ,它将完整的时区信息输出到一个字符串并将其保存在数据库中,稍后您可以通过 TimeZoneInfo.Deserialize(...) 将其反序列化为 TimeZoneInfo 实例。并用于转换DateTime本地/UTC 日期时间。它是安全的,因为没有歧义,而且即使时区发生变化(确实如此 - 例如 DST 变化),您的数据仍然是一致的。当然,您需要注意更新数据库以保持同步(非常罕见)。

通过上述方法,您可以将日期时间保存为 UTC 或本地日期,您必须根据用例决定使用哪一种。在 UTC 中存储日期和时间时,一件有趣的事情是用户的“今天”的概念变得稍微复杂一些 - 您可以在我的博客 here 上阅读相关内容。 .

关于asp.net-mvc - 为时区敏感应用程序存储 DateTimeOffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320568/

相关文章:

c# - 单击表单按钮时,Asp-Page-Handler 不会触发 Razor 模型中的方法

asp.net-mvc - 将消息从 Action Controller 传递到另一个 Action Controller 的最佳方式是什么

javascript - mvc - ajax pager - 使当前页面无效链接

java - 客户端 JavaScript 计算的 Unix 时间戳是否与用户的时区相关?

javascript - 从字符串和时区构建日期对象

c++ - Windows时区写入注册表是否可靠?

asp.net-mvc - ASP.NET MVC - 以 HTML 或 XML 形式返回数据

asp.net-mvc - 向 MVC 路由添加冗余信息

sql-server - SQL Server 时区

php - 即时更改时区