我正在创建一个日期列表,该日期从月的最后一天开始,到下个月的第一天结束,全部以UTC格式表示。对于本月(2013年10月),法国时区的用户在9月30日晚上10点开始他的月份开始UTC日期CalendarMonthStartUTC
,他在UTC中的结束日期CalendarMonthEndUTC
是10/31 @ 11PM。 / p>
我有一个如下所示的循环:
DateTime StartTime = CalendarMonthStartUTC;
DateTime EndTime = new DateTime()
while (StartTime < CalendarMonthEndUTC)
{
EndTime = StartTime.AddHours(24);
... do something here
StartTime = StartTime.AddHours(24);
}
这个循环适用于一年中的所有月份,除了10月,因为DayLight保存更改,这会产生OBO错误,因为循环通过在每次迭代时添加24小时来迭代。 我想知道如何修改我的循环,以便无论DayLight节省日期如何都能正常工作。
感谢您的建议。
答案 0 :(得分:3)
你不能只在当地工作,最后转换为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));