我正在将我的应用程序从 dday.ical 迁移到 ical.net,并且正在努力使用 TimeZones。
我设法重写从
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 等价物
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 中使用 TimeZone
我使用 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:00,它应该是 19 摄氏度等),并使用这些事件来控制加热设备。
Google 日历中的事件的时区为“(GMT+01:00) Amsterdam”。
在 DDay.Cal 代码中,IEvent 的 StartTime 和 EndTime 的 Local 属性由于阿姆斯特丹时区而减少了一个小时。上面编写的代码通过设置 IEvent 的 StartTime 和 EndTime 属性的 TimeZone 解决了这个问题。这更正了时间,在这种情况下为一小时。
任何人都可以帮助我如何(重新)将提到的 TimeZone 使用写入 ical.net 等价物吗?