DateTime.Now 对比 DateTime.UtcNow 在托管我的站点和数据库的 Azure 服务器上

DateTime.Now vs DateTime.UtcNow on Azure server hosting my site and db

一段时间以来,我一直在为 utc 和当地时间而苦苦挣扎。我有一个创建事件 (classes) 的应用程序,当主持人创建事件 (class) 时,他们会设置事件日期和时间。因此,在服务器端,我保存了事件的本地日期时间和事件的 UTC 日期时间。

但现在我一直在困惑自己。

示例:如果用户访问主机页面以查看所有主机事件(classes),如果我在查询中使用日期时间和访问该页面的用户与主机所在的时区不同。

目前我正在做这样的事情:

var events = host.Events.Where(j => j.EventDateTime >= DateTime.Now
            && j.EventStatus == EventStatus.Active).ToList()

但现在我对 DateTime.Now 感到沮丧,因为它是 Azure 服务器的日期时间,而此查询将本地事件日期时间与 UTC 日期时间进行比较。

所以我的问题是,
在将偏移量添加到 DateTime.Now 之前,我是否应该尝试找出 UTC 日期时间并将其传递?

或者我应该 运行 使用 UTC 日期时间进行查询吗?应该是这样的:

var events = host.Events.Where(j => j.UtcEventDateTime >= DateTime.UtcNow
            && j.EventStatus == EventStatus.Active).ToList()

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

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

很多人都有和你一样的问题,比如这个好问题: DateTime.Now vs. DateTime.UtcNow

您可能还会发现 Datetimeoffset 是另一种保存日期的方式,只需确保在添加它之前非常了解它: DateTime vs DateTimeOffset