一段时间以来,我一直在与utc和当地时间作斗争。我有一个用于创建事件(类)的应用程序,当主持人创建事件(类)时,它们会设置事件的日期和时间。因此,在服务器端,我既保存了事件的本地日期时间,又保存了事件的UTC日期时间。
但是现在我一直在困惑自己。
示例:如果用户访问主机页面以查看所有主机事件(类),如果我在查询中使用日期时间并且访问该页面的用户不同,我将如何查找主机事件主机所在的时区。
目前我正在做这样的事情:
var events = host.Events.Where(j => j.EventDateTime >= DateTime.Now
&& j.EventStatus == EventStatus.Active).ToList()
但是现在我对DateTime.Now
感到沮丧,因为它是Azure服务器的日期时间,并且此查询将本地事件日期时间与UTC日期时间进行了比较。
我的问题是,
我应该尝试弄清楚UTC日期时间是什么,并在将偏移量添加到DateTime.Now
之前传递它吗?
还是应该使用UTC日期时间运行查询?会是这样的:
var events = host.Events.Where(j => j.UtcEventDateTime >= DateTime.UtcNow
&& j.EventStatus == EventStatus.Active).ToList()
答案 0 :(得分:1)
请注意,服务器上的DateTime.Now表示服务器现在为datetime而不是用户Now,这可能会使您感到困惑,尤其是当应用程序分布在多个服务上或更改服务的位置时。
始终建议以UTC格式保存日期,并且可以基于每个用户区域向其中添加偏移量以进行显示,这样可以确保您的日期数据一致且易于比较和过滤。
许多人都像您这样的问题,也有类似的问题: DateTime.Now vs. DateTime.UtcNow
此外,您可能会发现Datetimeoffset是保存日期的另一种方式,只需确保对日期有充分的了解,然后再进行操作即可: DateTime vs DateTimeOffset