根据本地时间从数据库中检索记录
本文关键字:数据库 检索 记录 时间 | 更新日期: 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 表示。
将本地日期转换为世界时。
日期时间通用日期 = 日期差异.到通用时间();