gpt4 book ai didi

c# - 迭代夏令时更改的一个月中的几天

转载 作者:行者123 更新时间:2023-11-30 22:13:09 25 4
gpt4 key购买 nike

我正在创建一个天数列表,从该月最后一天的开始到下个月的第一天结束,全部采用 UTC。对于本月(2013 年 10 月),法国时区的用户的月开始 UTC 日期 CalendarMonthStartUTC 为 9 月 30 日晚上 10 点,他的结束日期 CalendarMonthEndUTC 在 UTC 中为 10/31 @ 晚上 11 点。

我有一个看起来像这样的循环:

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));

关于c# - 迭代夏令时更改的一个月中的几天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com