Миграция с DDay.Ical.Net на Ical.Net

Привет! Я перехожу с DDay.ical на нативные пакеты Ical.Net, но я застрял в следующем коде, который добавляет часовой пояс в DDay.Ical, пожалуйста, помогите

Предыдущий код:

List<DOAppointment> lst = objResponse.Appointments;
string timeZoneName = objResponse.UserTimezone; 
iCalendar calendar = new DDay.iCal.iCalendar();
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName); 
calendar.AddTimeZone(iCalTimeZone.FromSystemTimeZone(timeZone));

Миграция в Ical.Net:

  List<DOAppointment> lst = objResponse.Appointments;
  string timeZoneName = objResponse.UserTimezone;
  Ical.Net.Calendar calendar = new Ical.Net.Calendar();
  var  timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName); 
  ITimeZone tzID = timeZone;
  calendar.AddTimeZone(tzID);

Здесь я знаю этот календарь.AddTimezone будет принимать ITimezone, но как его передать, я не получаю, пожалуйста, помогите.

1 ответ

Решение

VTimeZone это конкретная реализация ITimeZone интерфейс. Пример ical.net будет выглядеть так:

var calendar = new Ical.Net.Calendar();

// ical.net supports BCL time zones as well as IANA time zones
calendar.AddTimeZone(new VTimeZone(objResponse.UserTimezone));

В будущем я могу изменить VTimeZone конструктор для выдачи исключения, если строка часового пояса не совпадает с чем-либо известным. Хотя сейчас это довольно глупо. За кулисами ical.net по умолчанию будет использовать системный часовой пояс, в котором выполняется код, если ничего не помогает. Это, вероятно, не хорошо.

Я также добавил вики-страницу с адаптацией вашего вопроса:

https://github.com/rianjs/ical.net/wiki/Working-with-time-zones

Другие вопросы по тегам