让我们假设我住在今日日期为2014年12月3日的时区 在保存记录之前,我将日期保存为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 2014年12月2日,但是我生活在日期为12/3/2014的时区。所以有意义的是,我如何修改上述查询以满足我的要求。任何建议
答案 0 :(得分:3)
现在我们知道该值存储为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);
我认为 基本上,您根本不需要差异 - 您只需要根据时间间隔计算出“今天”过滤器的含义,表示为UTC。
答案 1 :(得分:0)
将您的本地日期转换为通用时间。
DateTime universalDate = dateDifference.ToUniversalTime();