【发布时间】:2013-10-13 14:31:22
【问题描述】:
我正在创建一个日期列表,该列表从该月的最后一天开始到下个月的第一天结束,全部采用 UTC。对于本月(2013 年 10 月),法国时区的用户在 9/30 @ 10PM 的月份开始 UTC 日期 CalendarMonthStartUTC 和他在 UTC 中的结束日期 CalendarMonthEndUTC 是 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 小时进行迭代。 我想知道如何修改我的循环,使其不受夏令时的影响。
感谢您的建议。
【问题讨论】:
-
10 月的最后一个有效日期时间是 11 月 1 日之前的一个刻度。 UTC不受夏令时变化的影响,没有错误。
-
@HansPassant:当一天超过 24 小时(即在夏令时结束时增加一个小时)时不会出现错误,我只增加 24 小时。
-
不,UTC 天数始终为 24 小时。当您将 UTC 日期时间转换为本地时间时,由于 DST 更改,您最终可能会得到更多或更少的天数。
-
如果您想考虑特定的小时间隔(并为每个间隔执行中间计算,如您的代码中所示),您必须考虑夏令时(以及行中的代码我写的答案);但就你对一整天的兴趣而言,Ergwun 的方法显然更好。我也确实专注于时间,在这里失去了真正的意义(我编写的代码工作正常,但不必要地复杂)。
-
嗯...除非每天的特定时间(开始时间和结束时间)对您很重要(不确定您在“//...在这里做某事”部分中在做什么),那是,如果尽管增加了天数,您仍想知道“小时级别”会发生什么。如果您需要对每次迭代中发生的事情进行更多控制(并且每次都考虑夏令时),请告诉我,我可以取消删除我的答案。正如您提出的问题,Ergwun 的回答似乎是最充分的解决方案。