【问题标题】:ASP.NET MVC Handle Timezones Entity FrameworkASP.NET MVC 处理时区实体框架
【发布时间】:2014-06-27 14:42:14
【问题描述】:

我喜欢将当前用户的当前DateTime.Now 保存为UTC。对于任何用户来说,时间都不是相对的?我使用此代码 sn-p 来实现实体框架的 UTC: Entity Framework DateTime and UTC

查看数据库后,日期列没有改变。

09.05.2014 20:21:24

我需要在客户端显示相对于每个用户的日期。所以当用户在美国14:00创建他的帐户时,我喜欢在欧洲看到20:00

【问题讨论】:

  • 获取 DateTime 列值,然后执行 .ToLocal()
  • 你的意思是在客户端?
  • 是的,在设置为本地时间的环境中。如果它是可变的,那么您需要手动将其转换为该特定时区。重要的是将 DateTime 保存为 UTC。
  • 好像没有保存为UTC。即使使用 DateTimeKind 属性。
  • UTC 是格林威治时间,然后是欧洲时间,所以看到 20 而不是 14 是正常的

标签: entity-framework asp.net-mvc-4


【解决方案1】:

在 DateTime 对象上调用 .ToLocalTime() 会将其转换为本地时间。您应该始终将日期保存为 UTC,然后在显示时转换。

【讨论】:

  • 为什么我在数据库中看到像 09.05.2014 20:21:24 这样的字符串。已经是 UTC 了吗?我不这么认为。所以 DateTimeKind 属性不起作用。
  • 你是如何设置日期时间的? .ToUniversalTime()
【解决方案2】:

首先,您需要使用DateTime.UtcNow 而不是DateTime.Now。 EF 将按原样保存日期,它不会做任何事情。

对于数据库,它只是一个日期,是UTC还是特定时区,数据库不知道。只有当我们从数据库中检索日期时,在将其显示给本地用户之前,我们应该调用客户端 UI 库中的 ToLocalTime 或类似方法将 UTC 转换为本地时间。 ToLocalTime 假定输入实际上是 UTC。

如果您从客户端保存日期,例如在 JavaScript 中使用 AJAX 发布,则 JavaScript 日期应序列化为 UTC。

请记住,服务器不知道您从哪里发送日期,服务器无法将任何日期转换为 UTC,另一方面,客户端完全知道它设置在哪个国家和哪个时区,并且可以轻松地将本地时间转换为 UTC .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2020-05-26
    • 2010-09-25
    • 1970-01-01
    • 2012-10-18
    • 2011-02-20
    • 2012-07-22
    相关资源
    最近更新 更多