2016-10-10 22 views
0

我正在開源應用程序中同步Google和Outlook之間的日曆。一些用戶報告了幾年前開始日期反覆約會的一些奇怪行爲。下面是示例代碼,所有斷言都通過。我的問題是爲什麼從1970-10-14T08:00:00.000Z開始預約時間由API轉移到09:00:00 + 01:00,如果我將開始日期轉換到2000年,則轉入10:00:00 +02:00?當我檢查這兩個事件看起來如何在谷歌他們也開始在不同的時間,在我看來應該啓動的同一時間(只有年改變)使用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 

而且我想知道什麼,我需要做的將舊的重複約會正確保存到Google?我應該有一些獨立的邏輯,這取決於年?

非常感謝您的幫助!

+0

想用1月份來測試它。我想知道這是否是夏令時問題。 – DaImTo

回答

0

根據此documentation,其開始和結束字段必須定義第一次出現,其重複字段定義事件應該如何隨時間重複。

根據文檔,您可以嘗試此sample。在這裏,我於2016年10月14日上午10點至上午10點之間創建了一個活動,它將按照規則每年重複一次。如果僅在規則中添加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