【问题标题】:Recurring yearly appointments created using Google API使用 Google API 创建的定期年度约会
【发布时间】:2016-10-10 20:49:13
【问题描述】:

我正在开发开源应用程序以在 Google 和 Outlook 之间同步日历。一些用户报告了几年前开始日期重复约会的一些奇怪行为。下面是示例代码,所有断言都通过了。我的问题是为什么从 1970-10-14T08:00:00.000Z 开始的预约时间被 API 转移到 09:00:00+01:00,如果我将开始日期转移到 2000 年,它会转移到 10:00:00 +02:00 ?当我检查这两个事件在 Google 中的外观时,它们是在不同的时间开始的,我认为应该在同一时间开始(因为只有年份发生了变化)

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?我应该有一些取决于年份的单独逻辑吗?

非常感谢您的帮助!

【问题讨论】:

  • 想用一月来测试它。我想知道这是否是夏令时问题。

标签: c# google-api google-calendar-api google-api-dotnet-client


【解决方案1】:

根据这个documentation,它的开始和结束字段必须定义第一次发生,它的重复字段定义应该如何随着时间的推移重复事件。

您可以根据文档尝试此sample。在这里,我从 2016 年开始,在 10 月 14 日的每个上午 10 点至上午 11 点创建了一个活动。它会按照规则中的规定每年重复一次。如果您在规则中添加UNTIL=[yearmmdd],if 只会停止。

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 以获取更多示例。

【讨论】:

  • 不幸的是,这没有回答我的问题,我的问题是,如果我从几年前开始创建重复事件(比如 1970 年开始),而另一个最近开始的事件,尽管我指定了相同的开始时间(比如上午 10 点) 结果我改变了时间
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 2020-04-27
  • 2020-09-28
  • 2015-12-05
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多