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

时间:2014-12-02 14:07:31

标签: c# .net datetime

让我们假设我住在今日日期为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的时区。所以有意义的是,我如何修改上述查询以满足我的要求。任何建议

2 个答案:

答案 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();