私のアプリケーションをdday.icalからical.netに移行していて、TimeZonesで苦労しています。 dday.icalからical.netへの移行:イベント期間にタイムゾーンを使用する方法
は私がIICalendarCollection calendarCollection = LoadFromUri(new Uri(GoogleCalendarUrl));
ICalendar calendar = calendarCollection.FirstOrDefault();
string timeZone = "<some timezone>";
if (!string.IsNullOrWhiteSpace(timeZone))
{
((Calendar)calendar).AddTimeZone(new VTimeZone(timeZone));
}
同等ical.netに
IICalendarCollection calendarCollection = iCalendar.LoadFromUri(new Uri(GoogleCalendarUrl));
IICalendar calendar = calendarCollection.FirstOrDefault();
string timeZone = "<some timezone>";
if (!string.IsNullOrWhiteSpace(timeZone))
{
System.TimeZoneInfo timezoneinfo = System.TimeZoneInfo.FindSystemTimeZoneById(timeZone);
calendar.AddTimeZone(timezoneinfo);
}
からタイムゾーンを追加書き換えるために管理しかし、私はical.netでタイムゾーンを使用する方法について見当もつかない
TimeZoneを使用する私のdday.icalコードは
iCalTimeZone timezone = null;
if (!string.IsNullOrWhiteSpace(TimeZone))
{
System.TimeZoneInfo timezoneinfo = System.TimeZoneInfo.FindSystemTimeZoneById(TimeZone);
timezone = iCalTimeZone.FromSystemTimeZone(timezoneinfo);
}
Occurrence occurrence = <filled from other code part>;
IEvent iEvent = occurrence.Source as IEvent;
IPeriod period = occurrence.Period;
if ((iEvent != null) && (period != null))
{
if (!string.IsNullOrWhiteSpace(TimeZone))
{
period.StartTime.SetTimeZone(timezone);
period.EndTime.SetTimeZone(timezone);
}
DateTime localStartTime = period.StartTime.Local;
DateTime localEndTime = period.EndTime.Local;
// Do something with local start and end time.
// ...
}
です
私のコードの目的は、私の家を暖房するための予定されたイベント(19時には19℃でなければならない)を含む非公開のGoogleカレンダーを読み込み、これらのイベントを使用して暖房装置を制御することです。
Googleカレンダーの予定には、タイムゾーン(GMT + 01:00)アムステルダムが含まれています。
DDay.Calコードで、IEventのStartTimeとEndTimeのLocalプロパティは、アムステルダムのTimeZoneのため1時間オフでした。上記のコードは、IEventのStartTimeおよびEndTimeプロパティのTimeZoneを設定することでこれを修正しました。これにより、この場合1時間の時間が修正されました。
誰でも、上記のTimeZoneの使用方法を(似たように)ical.netに相当するものに書き込む方法を教えてください。
あなたがしようとしていることは明確ではありません。タイムゾーンを騒がすことは終わりの手段ですが、何が終わりですか?あなたが達成しようとしている本物は何ですか?再帰集合を計算する?一連のイベントをあるタイムゾーンから別のタイムゾーンに変換しますか?他に何か? – rianjs
投稿に自分のコードの目的を追加しました。物事を明確にしてくれることを願っています。 – dromer1967
私は、ical.netのタイムゾーンコードを多くリファクタリングしました。その背後ではNodaTimeを使用しているため、以前のdday.icalに比べてタイムゾーンの変換がより高速で正確になるはずです。タイムゾーンを使って何かをする必要がありますか?あなたはおそらくical.netに存在しないdday.icalに存在するバグを回避する方法を尋ねています。もう一度、あなたは何を達成しようとしていますか?サーモスタットが行動を起こす時間を計算しますか?これは再発ルールのセットに基づいていますか? – rianjs