2

月の最後の日の初めから始まり、翌月の最初の日まで、すべて UTC で終わる日のリストを作成しています。今月 (2013 年 10 月) の場合、フランス語のタイムゾーンにいるユーザーの月の開始 UTC 日付CalendarMonthStartUTCは 9/30 @ 10PM であり、CalendarMonthEndUTCUTC での彼の終了日は 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 月を除くすべての月で正常に動作します。これは、ループが各反復で 24 時間を追加して反復するため、OBO バグが発生する夏時間の変更のためです。夏時間に関係なく機能するようにループを変更する方法を考えています。

ご提案いただきありがとうございます。

4

1 に答える 1

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)); 
于 2013-10-13T15:06:35.607 に答える