循环访问每月夏令时发生变化的日子
本文关键字:变化 日子 夏令时 访问 循环 | 更新日期: 2023-09-27 18:35:05
我正在创建一个日期列表,这些日期从该月的最后一天开始,到下个月的第一天结束,全部采用UTC。对于本月(2013 年 10 月),法国时区的用户的月份开始 UTC 日期CalendarMonthStartUTC
为 9/30 @ 10PM,CalendarMonthEndUTC
UTC 的结束日期为 10/31 @ 11PM。
我有一个看起来像这样的循环:
DateTime StartTime = CalendarMonthStartUTC;
DateTime EndTime = new DateTime()
while (StartTime < CalendarMonthEndUTC)
{
EndTime = StartTime.AddHours(24);
... do something here
StartTime = StartTime.AddHours(24);
}
此循环在一年中的所有月份(10 月除外)都运行良好,因为夏令时更改会创建 OBO 错误,因为循环通过在每次迭代中添加 24 小时进行迭代。我想知道如何修改我的循环,使其无论夏令时如何都能正常工作。
感谢您的建议。
您不能只在本地时间工作,并在最后转换为 UTC 吗?
如果要对当前在本地计算机上设置的时区执行计算,则可以执行以下操作:
DateTime calendarMonth = new DateTime(2013, 10, 1, 0, 0, 0, DateTimeKind.Local);
DateTime startDay = calendarMonth.AddDays(-1);
DateTime endDay = calendarMonth.AddMonths(1);
while (startDay <= endDay)
{
Console.WriteLine(startDay + " = " + startDay.ToUniversalTime());
startDay = startDay.AddDays(1);
}
如果要计算给定时区的它而不考虑本地计算机设置,则可以像这样转换为UTC:
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
var utcTime = TimeZoneInfo.ConvertTimeToUtc(startDay, timeZone));