根据本地时间从数据库中检索记录

本文关键字:数据库 检索 记录 时间 | 更新日期: 2023-09-27 18:32:57

假设我住在一个时区,今天日期是:12/3/2014在保存记录之前,我将日期保存为 UTC,因此它将是 12/2/2014

user.Created = DateTime.UtcNow;

现在我有一个搜索页面,我想根据过滤器"今天"检索记录。我也想截断时间,所以我正在使用EF的DbFunction。

 DateTime dateDifference = DateTime.Now.Date;
 var result= queryableData
       .Where(s => dateDifference ==
         DbFunctions.CreateDateTime(s.Created.Year, s.Created.Month,
             s.Created.Day, 0, 0, 0)).AsQueryable();

上面的查询不返回任何记录,因为存储的日期是 UTC 12/2/2014,但是我生活在日期为 12/3/2014 的时区。所以这是有道理的,我怎样才能修改上面的查询以满足我的要求。任何建议

根据本地时间从数据库中检索记录

现在我们知道该值存储为DateTime(UTC 格式),您只需要在今天开始时找到午夜的 UTC 时间,在今天结束时找到午夜的 UTC 时间。

如果您愿意使用系统时区,则可以使用:

DateTime today = DateTime.Today;
DateTime startUtc = today.ToUniversalTime();
DateTime endUtc = today.AddDays(1).ToUniversalTime();
var result = queryableDate.Where(s => startUtc <= s.Created &&
                                      s.Created < endUtc);

我认为您不需要DbFunctions查询。基本上,您根本不需要差异 - 您只需要计算出"今天"过滤器在时间间隔方面的含义,以 UTC 表示。

将本地日期转换为世界时。

日期

时间通用日期 = 日期差异.到通用时间();