2016-10-10 11 views
0

私はGoogleとOutlookの間でカレンダーを同期するためにオープンソースアプリを開発しています。いくつかのユーザーは、何年も前の開始日を持つ定期的な予定に対して、何らかの異常な動作を報告しました。下にサンプルコードがあり、すべてのアサーションが成功しています。私の質問は、1970年10月14日、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 

そして私は私が何をする必要があるか知りたいのですが古い定期的な予定をGoogleに正しく保存するには私は年に依存するいくつかの別個の論理を持つべきですか?

多くのご協力ありがとうございます!

+0

代わりに1月を使用してテストしたいと考えています。これが夏時間の問題であるかどうか疑問に思っています。 – DaImTo

答えて

0

このdocumentationから、その開始および終了フィールドは最初のオカレンスを定義しなければならず、その反復フィールドは、イベントが時間の経過とともにどのように繰り返されるべきかを定義します。

これを試すことができますsampleは、ドキュメントに基づいています。ここでは、2016年に始まる10月14日の午前10時から午後11時まで、毎年イベントを作成しました。ルールは毎年繰り返されます。ルールに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年のスタート)と最近のスタートイベントを作成すると、 – PPA

関連する問題