我想将当前用户的当前DateTime.Now
保存为UTC。对于任何用户来说,时间是相对于彼此的?我使用此代码片段来实现实体框架的UTC:
Entity Framework DateTime and UTC
查看数据库后,日期列未更改。
09.05.2014 20:21:24
我需要在客户端显示相对于每个用户的日期。因此,当用户在美国14:00
创建自己的帐户时,我希望在欧洲看到20:00
。
答案 0 :(得分:1)
在DateTime对象上调用.ToLocalTime()
会将其转换为本地时间。您应该始终将日期保存为UTC,然后在显示时进行转换。
答案 1 :(得分:1)
首先,您需要使用DateTime.UtcNow
而不是DateTime.Now
。 EF将保存日期,它不会做任何事情。
对于数据库,它只是一个日期,无论是UTC还是特定时区,数据库都不知道。只有当我们从数据库中检索日期时,在将其显示给本地用户之前,我们应该在客户端UI库中调用ToLocalTime或类似方法将UTC转换为本地时间。 ToLocalTime假定输入实际上是UTC。
如果您要从客户端保存日期,例如使用JavaScript中的AJAX帖子,则应将JavaScript日期序列化为UTC。
请记住,服务器不知道您发送日期的位置,服务器无法将任何日期转换为UTC,另一方面,客户端完全了解设置的国家/地区和时区,并且可以轻松地将本地时间转换为UTC