0

我有一个使用 UTC 设置的事件,它在夏令时重复出现。夏令时切换后,时间移动一个小时。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:20012072 nRRULE:FREQ=WEEKLY;UNTIL=20130707T180000Z\n摘要:第 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\n摘要:第 4 类 - TEST1DST\nBEGIN:VALARM\nTRIGGER:-PT45M\nACTION:DISPLAY\nEND:VALARM:nENDTEST1EVST nEND:VCALENDAR"]

4

2 回答 2

0

我对 DST 和 UTC 的工作方式有误。我在想,设置 UTC 时间意味着日历会将其读取为设置时间并自动显示正确的本地时间。如果其他人有点困惑,可以这样想:MST 是 UTC-07:00 MDT (DST) 是 UTC-06:00。如果您有一个设置为全年重复的日历事件并且它是 18:00 UTC,它将在 MDT 下午 12:00 或 MST 上午 11:00。对于 ICS 文件,您可以定义 STANDARD 时区和 DAYLIGHT 时区,或者将事件分成多个部分,每个部分使用正确的 UTC 时间。

我希望这可以为其他人解决问题。

于 2012-07-26T17:46:08.397 回答
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 回答