0

UTC を使用して設定されたイベントがあり、夏時間に繰り返されます。サマータイムの切り替え後、時刻が 1 時間ずれます。UTC は DST を使用しないため、時刻は同じままである必要があります。DST の後に、正確に同じ UTC 時間値でイベントを追加でき、カレンダーに正しい時間が表示されます。定期的なイベントとその後に発生するイベントを含む ICS ファイルを以下に投稿しました。誰かがこれに遭遇しましたか?提案された修正または変更はありますか?

["BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//sethhill v1.0//NONSGML //EN\nCALSCALE:GREGORIAN\nMETHOD:PUBLISH\nBEGIN:VEVENT\nDTSTAMP:20120725T222602Z\nDTSTART:20120724T180000Z\nDTEND:2012018024 nRRULE:FREQ=WEEKLY;UNTIL=20130707T180000Z\nSUMMARY:Class 4 - NODST\nBEGIN:VALARM\nTRIGGER:-PT45M\nACTION:DISPLAY\nDESCRIPTION:NODST\nEND:VALARM\nEND:VEVENT\nBEGIN:VEVENT\nDTSTAMP:20120725T222602Z\ nDTSTART:20121120T190000Z\nDTEND:20121120T193000Z\nRRULE:FREQ=WEEKLY;UNTIL=20130707T180000Z\nSUMMARY:Class 4 - TEST1DST\nBEGIN:VALARM\nTRIGGER:-PT45M\nACTION:DISPLAY\nENDEVENT\nEND:VALARMEND:1DSTARM nEND:VCALENDAR"]

4

2 に答える 2

0
public static DateTime GetDSTStart(int year, TimeZoneInfo timeZone)
        {
            DateTime finder = new DateTime(year,3,8);
            finder = finder.AddHours(6);
            for (int i = 0; i < 7; i++)
            {
                if(timeZone.IsDaylightSavingTime(finder.AddDays(i))){
                    return (finder.AddDays(i).AddHours(-6));
                }
            }
            finder = DateTime.MinValue;
            return finder;
        }

public static DateTime GetDSTEnd(int year, TimeZoneInfo timeZone)
        {
            DateTime finder = new DateTime(year, 11, 1);
            finder = finder.AddHours(6);
            for (int i = 0; i < 7; i++)
            {
                if (!timeZone.IsDaylightSavingTime(finder.AddDays(i)))
                {
                    return (finder.AddDays(i).AddHours(-6));
                }
            }
            finder = DateTime.MinValue;
            return finder;
        }
于 2013-02-26T06:07:14.660 に答える
0

DST と UTC の仕組みについて、私は間違っていました。UTC 時刻が設定されているということは、カレンダーがそれを設定時刻として読み取り、正しい現地時刻を自動的に魔法のように表示することを意味すると考えていました。他の誰かが少し混乱している場合は、次のように考えてください: MST は UTC-07:00 MDT (DST) は UTC-06:00 です。年間を通して繰り返すように設定されたカレンダー イベントがあり、それが 18:00 UTC である場合、それは 12:00PM MDT または 11:00AM MST になります。ICS ファイルの場合、STANDARD タイムゾーンと DAYLIGHT タイムゾーンを定義するか、イベントを複数の部分に分割して、それぞれに正しい UTC 時間を指定できます。

これが他の誰かのために物事を解決することを願っています。

于 2012-07-26T17:46:08.397 に答える