托管我的网站和数据库的Azure服务器上的DateTime.Now vs DateTime.UtcNow

时间:2018-08-25 23:28:16

标签: c# azure datetime azure-sql-database utc

一段时间以来,我一直在与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()

1 个答案:

答案 0 :(得分:1)

请注意,服务器上的DateTime.Now表示服务器现在为datetime而不是用户Now,这可能会使您感到困惑,尤其是当应用程序分布在多个服务上或更改服务的位置时。

始终建议以UTC格式保存日期,并且可以基于每个用户区域向其中添加偏移量以进行显示,这样可以确保您的日期数据一致且易于比较和过滤。

许多人都像您这样的问题,也有类似的问题: DateTime.Now vs. DateTime.UtcNow

此外,您可能会发现Datetimeoffset是保存日期的另一种方式,只需确保对日期有充分的了解,然后再进行操作即可: DateTime vs DateTimeOffset