繁体   English   中英

当夏时制更改时,在一个月中的每一天进行迭代

[英]iterating through the days of a month when DayLight saving changes

我正在创建一个以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);
} 

除夏令时外,此循环在一年中的所有月份都可以正常工作,这是因为夏时制的更改,这会产生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)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM