Ich migriere meine Anwendung von dday.ical nach ical.net und kämpfe mit TimeZones.Migration von dday.ical zu ical.net: wie man eine Zeitzone im Ereigniszeitraum verwendet
konnte ich die Zeitzone aus neu zu schreiben, das Hinzufügen
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);
}
zum ical.net Äquivalent
IICalendarCollection calendarCollection = LoadFromUri(new Uri(GoogleCalendarUrl));
ICalendar calendar = calendarCollection.FirstOrDefault();
string timeZone = "<some timezone>";
if (!string.IsNullOrWhiteSpace(timeZone))
{
((Calendar)calendar).AddTimeZone(new VTimeZone(timeZone));
}
Aber ich habe keine Ahnung, wie die Time-Zone in ical.net verwenden
Mein dday.ical Code für die Verwendung der TimeZone ist
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.
// ...
}
Der Zweck meines Codes ist es, einen privaten Google Kalender zu lesen, der geplante Ereignisse zum Heizen meines Hauses enthält (um 19:00 sollte es 19 Grad Celsius usw. sein) und diese Ereignisse zu verwenden, um ein Heizgerät zu steuern.
Die Ereignisse im Google Kalender haben die TimeZone '(GMT + 01: 00) Amsterdam'.
Im DDay.Cal-Code war die Local-Eigenschaft von StartTime und EndTime für ein IEvent aufgrund der Zeitzone von Amsterdam um eine Stunde inaktiv. Der oben beschriebene Code hat dies durch Festlegen der TimeZone der StartTime- und EndTime-Eigenschaften von IEvent behoben. Dies korrigierte die Zeit, in diesem Fall für eine Stunde.
Kann mir bitte jemand helfen, wie man die erwähnte Nutzung der TimeZone auf das ical.net-Äquivalent (re) schreibt?
Es ist nicht klar, was Sie zu tun versuchen. Mit den Zeitzonen zu spielen ist ein Mittel zum Zweck, aber welches Ende? Was ist das wirklich, was du erreichen willst? Einen Wiederholungssatz berechnen? Konvertieren Sie eine Reihe von Ereignissen von einer Zeitzone in eine andere? Etwas anderes? – rianjs
Ich habe den Zweck meines Codes in der Post hinzugefügt. Ich hoffe, das macht die Dinge klar. – dromer1967
Ich habe einen großen Teil des Zeitzonencodes in ical.net umgestaltet. Hinter den Kulissen verwendet es NodaTime, daher sollten Zeitzonen-Konvertierungen schneller und genauer sein als das, was dday.ical vorher getan hat. Sind Sie sicher, dass Sie überhaupt etwas mit Zeitzonen machen müssen? Sie fragen, wie Sie einen Fehler umgehen können, der in dday.ical existiert, der in ical.net wahrscheinlich nicht existiert. Noch einmal, was versuchst du zu erreichen? Berechnen Sie die Zeit, die Ihr Thermostat eine Aktion ausführen soll? Basiert das auf einer Reihe von Wiederholungsregeln? – rianjs