2016-10-10 4 views
0

Я работаю над приложением Open Source, чтобы синхронизировать календари между Google и Outlook. Некоторые пользователи сообщили о некотором странном поведении для повторных встреч с датой начала года. Ниже приведен пример кода, все утверждения проходят. Мой вопрос в том, почему для назначения, начиная с 1970-10-14T08: 00: 00.000Z, час сдвигается API до 09: 00: 00 + 01: 00, и если я сдвигаю дату начала до 2000 года, она сдвигается на 10:00:00 +02: 00? Когда я проверить, как выглядит оба события в Google они начинают на разных часов, и, по моему мнению, должны начать в тот же час (как только год был изменен)Повторяющиеся ежегодные встречи, созданные с использованием Google API

var e1 = new Google.Apis.Calendar.v3.Data.Event(); 
e1.Summary = "Birthday1"; 
e1.Start = new EventDateTime(); 
e1.End = new EventDateTime(); 
e1.Start.DateTime = new DateTime(1970, 10, 14, 10, 0, 0); 
e1.End.DateTime = new DateTime(1970, 10, 14, 11, 0, 0); 
e1.Start.TimeZone = "Europe/Warsaw"; 
e1.End.TimeZone = "Europe/Warsaw"; 
e1.Recurrence = new List<String>(); 
e1.Recurrence.Add("RRULE:FREQ=YEARLY;BYMONTHDAY=14;BYMONTH=10"); 

Assert.AreEqual("1970-10-14T08:00:00.000Z", e1.Start.DateTimeRaw); 
var c1 = service.Insert(e1, primaryCalendar.Id).Execute(); 
Assert.AreEqual("1970-10-14T09:00:00+01:00", c1.Start.DateTimeRaw); // 09:00:00+01:00 

var e2 = new Google.Apis.Calendar.v3.Data.Event(); 
e2.Summary = "Birthday2"; 
e2.Start = new EventDateTime(); 
e2.End = new EventDateTime(); 
e2.Start.DateTime = new DateTime(2000, 10, 14, 10, 0, 0); 
e2.End.DateTime = new DateTime(2000, 10, 14, 11, 0, 0); 
e2.Start.TimeZone = "Europe/Warsaw"; 
e2.End.TimeZone = "Europe/Warsaw"; 
e2.Recurrence = new List<String>(); 
e2.Recurrence.Add("RRULE:FREQ=YEARLY;BYMONTHDAY=14;BYMONTH=10"); 

Assert.AreEqual("2000-10-14T08:00:00.000Z", e2.Start.DateTimeRaw); 
var c2 = service.Insert(e2, primaryCalendar.Id).Execute(); 
Assert.AreEqual("2000-10-14T10:00:00+02:00", c2.Start.DateTimeRaw); //10:00:00+02:00 

И я хотел бы знать, что мне нужно сделать правильно ли сохранить старые повторяющиеся встречи? Должен ли я иметь отдельную логику, которая зависит от года?

Большое спасибо за помощь!

+0

Хотите протестировать его, используя вместо этого январь. Мне интересно, если это проблема с летним временем. – DaImTo

ответ

0

Основываясь на этом documentation, его начальное и конечное поля должны определять первое вхождение, а поле его повторения определяет, как событие должно повторяться с течением времени.

Вы можете попробовать это sample на основе документации. Здесь я организовал мероприятие каждые 10 утра по 11 октября 14 октября, начиная с 2016 года. Он будет повторяться каждый год, как указано в правиле. Если будет остановлено, только если вы добавите UNTIL=[yearmmdd] в правило.

Event event = new Event() 
{ 
    Summary = "Appointment", 
    Location = "Somewhere", 
    Start = new EventDateTime() { 
     DateTime = new DateTime("2016-10-14T10:00:00") 
     TimeZone = "Europe/Warsaw" 
    }, 
    End = new EventDateTime() { 
     DateTime = new DateTime("2016-10-14T11:00:00") 
     TimeZone = "Europe/Warsaw" 
    }, 
    Recurrence = new String[] { 
     "RRULE:FREQ=YEARLY;BYMONTHDAY=14;BYMONTH=10" 
    }, 
    Attendees = new List<EventAttendee>() 
    { 
     new EventAttendee() { Email: "attendeeEmail" }, 
     // ... 
    } 
}; 

Event recurringEvent = service.Events.Insert(event, "primary").Fetch(); 

Console.WriteLine(recurringEvent.Id); 

Вы также можете проверить это documentation для получения дополнительной выборки.

+0

К сожалению, это не отвечает на мой вопрос, моя проблема в том, что если я создаю повторяющееся событие, начинающееся несколько лет назад (например, начало в 1970 году), а другое - недавно, но, несмотря на то, что я указываю одно и то же время начала (например, 10 утра), в результате я сдвинул часы – PPA

 Смежные вопросы

  • Нет связанных вопросов^_^