如何获得全天的所有记录



我有一些记录,我只想显示那天,所以如果是7月6日,它应该是

7/6/2011 12:00:00 AM to 7/6/2011 11:59:59 AM

假设我有一个记录,截止日期是7月6日晚上7点(我的当地时间)

07:00:00 p.m. Wednesday July 6, 2011 in Canada/Pacific converts to
02:00:00 a.m. Thursday July 7, 2011 in UTC

这是UTC时间凌晨2点。这是存储在数据库中(我只存储UTC日期,然后使用UTC抓取记录,我需要然后转换为本地时区)

现在我有了这个代码
    DateTime startDate = DateTime.UtcNow.Date;

    DateTime endDate = DateTime.UtcNow.Date.AddSeconds(86399);
    return new DateFilterRange(startDate, endDate);
// result
7/6/2011 12:00:00 AM to 7/6/2011 11:59:59 AM

当然,这不会抓取上面的任务,因为在数据库中记录被存储为7月7日,但用户仍然在7月6日。

我想我必须使用偏移量,但我不知道如何使用它

听起来你需要把你的本地时间边界,例如当地一天的开始,转换成UTC,然后过滤。

请注意,您的初始示例仅显示7月6日的前半部分- 12am到12pm。还不清楚这是不是你想要的。

请注意,在某些时区,不是所有的日子都从午夜开始——如果夏令时改变发生在午夜发生的时候,一天实际上可能从凌晨1点开始。

编辑:只是为了清楚…

你需要从用户那里得到年、月、日。如果在UI中指定了,可以使用以下代码:

DateTime localDate = new DateTime(year, month, day, 0, 0, 0,
                                  DateTimeKind.Unspecified);

否则,您将需要这样的内容:

// Work out the current date in the *user's* time zone
DateTime localDate = TimeZoneInfo.ConvertTime(DateTime.UtcNow, timeZone).Date;
// And then convert that "start of day" back to UTC
DateTime utcStart = TimeZoneInfo.ConvertTimeToUtc(localDate, timeZone);
DateTime utcEnd = TimeZoneInfo.ConvertTimeToUtc(localDate.AddDays(1),
                                                timeZone);

请注意,这个并没有考虑午夜不经常发生的时区

注意:根据评论,我假设您已经知道用户的时区…

我得到"right now"。2转换为用户的时区。3获得用户时区的日边界。将边界转换为UTC时间。

DateTime userDayStart = TimeZoneInfo.ConvertTimeFromUtc(
    DateTime.UtcNow,
    usersTimeZone
).Date;
DateTime utcStart = TimeZoneInfo.ConvertTimeToUtc(
    userDayStart,
    usersTimeZone
);
DateTime utcEnd = TimeZoneInfo.ConvertTimeToUtc(
    userDayStart.AddDays(1),
    usersTimeZone
);

当然,。date和。adddays()操作发生在本地时区,因此对于夏令时等来说,它并不完美。

相关内容

  • 没有找到相关文章

最新更新