[英]Google Calendar Api v3 EventDateTime
我試圖使用谷歌api v3在谷歌日歷中插入事件,並在插入過程中收到錯誤。我正在使用c#。
錯誤:
Google.Apis.Requests.RequestError
開始和結束時間無效或不匹配。 [400]
錯誤[消息[開始和結束時間無效或不匹配。]位置[ - ]原因[無效]域[全局]
我的EventDateTime代碼就在這里。
EventDateTime EventStartDTime = new EventDateTime();
EventStartDTime.Date = "2013-06-03";
EventStartDTime.DateTime = "2013-06-03T10:00:00.000+05:00";
EventStartDTime.TimeZone = "Asia/Karachi";
EventDateTime EventEndtDTime = new EventDateTime();
EventEndtDTime.Date = "2013-06-05";
EventEndtDTime.DateTime = "2013-06-05T10:00:00.000+05:00";
EventEndtDTime.TimeZone = "Asia/Karachi";
任何人都可以幫我解決這個問題嗎?
Google日歷V3 API時間戳需要UTC格式,因此您可以提及日期時間和時區(可選),因此您應提供以下格式,該格式會自動獲取當前時區:
DateTime start = DateTime.Now;
DateTime end = start + TimeSpan.FromMinutes(30);
var curTZone = TimeZone.CurrentTimeZone;
var dateStart = new DateTimeOffset(start, curTimeZone.GetUtcOffset(start));
var dateEnd = new DateTimeOffset(end, curTimeZone.GetUtcOffset(end));
var startTimeString = dateStart.ToString("o");
var endTimeString = dateEnd.ToString("o");
evnt.Start = new EventDateTime()
{
DateTime = startTimeString
};
evnt.End = new EventDateTime()
{
DateTime = endTimeString
};
希望這個幫助。
在閱讀了這里的文檔之后,看起來您提供的偏移量是可選的。 來自文檔:
start.dateTime | datetime | 時間,作為組合的日期時間值(根據RFC 3339格式化)。 除非在'timeZone'中明確指定時區,否則需要時區偏移。
嘗試刪除DateTime變量中的偏移量或刪除TimeZone變量。 在我自己使用Python的測試中,這對我有用。 我的代碼示例(字典的相關部分):
{
'start': {
'dateTime': '2013-06-05T09:00:00',
'timeZone': 'Europe/Oslo'
},
'end': {
'dateTime': '2013-09-T15:30:00',
'timeZone': 'Europe/Oslo'
},
}
我希望有所幫助。
在某個時間更新(而不是創建)事件時,在darthlukan的答案中指定時區對我來說不起作用。 但是,將DateTimeKind設置為本地時間可以解決問題:
DateTime start = DateTime.Now;
DateTime end = start + TimeSpan.FromMinutes(30);
start = DateTime.SpecifyKind(start, DateTimeKind.Local);
end = DateTime.SpecifyKind(end, DateTimeKind.Local);
Event newEvent = new Event();
newEvent.Start = new EventDateTime() { DateTime = start };
newEvent.End = new EventDateTime() { DateTime = end };
這是最終的代碼,現在工作正常:
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "381422642478-tg5s8crg6j1atn259u0aptnltrhmlc24.apps.googleusercontent.com",
ClientSecret = "7yxk_DOKRQv7XNB1rTF5FM2j",
},
new[] { CalendarService.Scope.Calendar },
"user",
CancellationToken.None).Result;
// Create the service.
var service = new CalendarService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = "Calendar API Sample",
});
DateTime start = DateTime.Now;
DateTime end = start + TimeSpan.FromMinutes(30);
DateTime initiate = DateTime.Now;
DateTime ending = start + TimeSpan.FromMinutes(30);
start = DateTime.SpecifyKind(start, DateTimeKind.Local);
end = DateTime.SpecifyKind(end, DateTimeKind.Local);
var myEvent = new Event
{
Summary = "Google I/O 2015",
Location = "800 Howard St., San Francisco, CA 94103",
Description = "A chance to hear more about Google's developer products.",
Start = new EventDateTime()
{
DateTime = DateTime.Parse("2018-10-12T09:00:00-07:00"),
TimeZone = "America/Los_Angeles",
},
End = new EventDateTime()
{
DateTime = DateTime.Parse("2018-10-12T17:00:00-07:00"),
TimeZone = "America/Los_Angeles",
},
Recurrence = new String[] { "RRULE:FREQ=WEEKLY;BYDAY=MO" },
Attendees = new List<EventAttendee>
{
new EventAttendee { Email = "wgcu418@gmail.com"}
},
};
var recurringEvent = service.Events.Insert(myEvent, "primary");
recurringEvent.SendNotifications = true;
recurringEvent.Execute();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.