我有一个 Windows 服务,每天晚上 3 点到 5 点之间运行。当作业运行时,会发生以下情况:
var endDate = DateTime.Today.ToUniversalTime(); // Set to midnight
var startDate = endDate.AddDays(-1);
夜间运行的查询类似于(所有日期当前存储为 UTC):
SELECT * FROM Table WHERE CreatedAt BETWEEN startDate AND endDate
这很好用,它基本上会在作业运行时抓取前一天的所有数据。我现在正在为此开发一个 UI 部分,用户单击一个按钮以查看将在晚上处理的数据计数。
我遇到的问题是当用户在正常工作时间内工作并单击该按钮时,计数将关闭 1 天。仅当本地时间在美国东部标准时间晚上 8 点之后(服务器位于东海岸)时,计数才会正确显示,因为那将是 UTC 时间午夜之后。
我试图用类似的方法解决这个问题:
var now = DateTime.Now;
var midnight = DateTime.Today.ToUniversalTime();
var endDate = (now.Day == midnight.Day) ? midnight.AddDays(1) : midnight;
var startDate = endDate.AddDays(-1);
但这是不正确的,因为它只会在一天中的某些时候起作用。如果在当地时间午夜之后单击该按钮,它将再次关闭一天。
有没有什么巧妙的方法可以使用 DateTime 对象来解决这个问题?