2014-05-09 116 views
0

我喜欢将当前用户的当前DateTime.Now保存为UTC。对于任何用户而言,时间是相对于彼此的?我使用此代码片段来实现实体框架的UTC: Entity Framework DateTime and UTCASP.NET MVC处理时区实体框架

查看数据库后,日期的列未发生更改。

09.05.2014 20:21:24 

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

+1

获取DateTime列值,然后执行'.ToLocal()' –

+0

您的意思是在客户端? –

+2

是的,在设置为本地时间的环境中。如果它是可变的,那么你需要手动将它转换到特定的时区。重要的是以UTC保存DateTime。 –

回答

1

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

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

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

请记住,服务器不知道您发送日期的位置,服务器无法将任何日期转换为UTC,另一方面,客户端已完全了解设置了哪个国家和哪个时区,并且可以轻松地将本地时间转换为世界标准时间。

1

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

+0

为什么我看到字符串像数据库中的09.05.2014 20:21:24。它已经是UTC了吗?我不这么认为。所以DateTimeKind属性不工作。 –

+0

你是如何设置DateTime的? '.ToUniversalTime()' –