我喜欢将当前用户的当前DateTime.Now
保存为UTC。对于任何用户而言,时间是相对于彼此的?我使用此代码片段来实现实体框架的UTC: Entity Framework DateTime and UTCASP.NET MVC处理时区实体框架
查看数据库后,日期的列未发生更改。
09.05.2014 20:21:24
我需要在客户端显示相对于每个用户的日期。所以当用户在美国创建他的账户时14:00
我喜欢在欧洲看到20:00
。
我喜欢将当前用户的当前DateTime.Now
保存为UTC。对于任何用户而言,时间是相对于彼此的?我使用此代码片段来实现实体框架的UTC: Entity Framework DateTime and UTCASP.NET MVC处理时区实体框架
查看数据库后,日期的列未发生更改。
09.05.2014 20:21:24
我需要在客户端显示相对于每个用户的日期。所以当用户在美国创建他的账户时14:00
我喜欢在欧洲看到20:00
。
首先您需要使用DateTime.UtcNow
而不是DateTime.Now
。英孚将保存日期,它不会做任何事情。
对于数据库,它只是一个日期,无论是UTC还是特定时区,数据库都不知道。只有当我们从数据库中检索日期时,在显示给本地用户之前,我们应该调用ToLocalTime或客户端UI库中的类似方法将UTC转换为本地时间。 ToLocalTime假定输入实际上是UTC。
如果您从客户端保存日期,例如在JavaScript中使用AJAX post,JavaScript日期应该被序列化为UTC。
请记住,服务器不知道您发送日期的位置,服务器无法将任何日期转换为UTC,另一方面,客户端已完全了解设置了哪个国家和哪个时区,并且可以轻松地将本地时间转换为世界标准时间。
在DateTime对象上调用.ToLocalTime()
会将其转换为当地时间。您应该始终将日期保存为UTC,然后在显示时进行转换。
为什么我看到字符串像数据库中的09.05.2014 20:21:24。它已经是UTC了吗?我不这么认为。所以DateTimeKind属性不工作。 –
你是如何设置DateTime的? '.ToUniversalTime()' –
获取DateTime列值,然后执行'.ToLocal()' –
您的意思是在客户端? –
是的,在设置为本地时间的环境中。如果它是可变的,那么你需要手动将它转换到特定的时区。重要的是以UTC保存DateTime。 –