如何创建具有本地时间的 google 日历事件?
How to create a google calendar event with local time?
我正在尝试从 Google 电子表格创建 Google 日历事件:
示例电子表格:
(细节和日期是不规则的,所以简单的重复事件不会安静地削减它)
代码:
function walk_sheet(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("CalendarGenerator");
for (var i = 2; i <= 39; i++) {
var date = sheet.getRange(i, 2).getValue();
var start = parseTime(sheet.getRange(i, 3).getDisplayValues().toString() ) ;
var end = parseTime(sheet.getRange(i, 4).getDisplayValues().toString() ) ;
var summary= sheet.getRange(i, 6).getValue();
var disc = sheet.getRange(i, 7).getValue();
add_bsf_event(date, start, end, summary, disc);
}
}
function add_bsf_event(dateIn, start, end, summary, disc){
start_date= new Date(dateIn.getYear(), dateIn.getMonth(), dateIn.getDate(), start.getHours(), start.getMinutes(),0,0);
end_date = new Date(dateIn.getYear(), dateIn.getMonth(), dateIn.getDate(), end.getHours(), end.getMinutes(),0,0);
...
CalendarApp.getCalendarById(calendarId).createEvent(summary, start_date, end_date);
}
它在夏令时除外。在 Google 日历中的 2017 年 3 月 13 日之后开始的事件是 1 小时后请求(晚上 7:55 而不是 6:55pm)。
我试过:
- 正在寻找接受当地时间的 Google 日历方法(又名发送 6:55PM 和 Google 日历 API 将其转换为 UTC)
- 正在寻找将本地时间转换为 UTC 的本机 JS 方法。
未能找到任何一种解决方案。是否有我没有找到或 different/better 解决此问题的方法?
您可以尝试查看Google日历APIdocumentation,它在这里提到您可以为事件的开始和结束使用单独的时区。
现在,对于转换时区的方法,我想这个tutorial可以帮到你。它在此处逐步说明了实现此转换所需执行的操作。
有关详细信息,请查看此相关 SO question,即使此代码位于 JAVA。
我的解决方案是使用 Google 日历 Ruby API 插入事件。设置起来有点痛苦,但是一旦我建立了连接并下载了样板代码,Ruby 就可以完美地处理夏令时的变化。
Google 快速入门指南做得不错:
https://developers.google.com/google-apps/calendar/quickstart/ruby
但是,如果您的 运行 在 Windows 上,SSL 证书可能无法验证;您可以通过以下方式禁用它:
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Ruby 我用来插入事件的方法:
def insert_event(summary, description, start_time, end_time, location, cal_id='primary')
event = Google::Apis::CalendarV3::Event.new({
summary:summary,
#color_id:5,
location:location,
description:description,
start:{date_time:start_time.to_datetime.rfc3339},
end:{date_time:end_time.to_datetime.rfc3339},
#reminders:{use_default: true}
})
#puts event.to_json
result = $service.insert_event(cal_id, event)
#puts result
puts "Event created: #{result.html_link}"
end
我正在尝试从 Google 电子表格创建 Google 日历事件:
示例电子表格:
(细节和日期是不规则的,所以简单的重复事件不会安静地削减它)
代码:
function walk_sheet(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("CalendarGenerator");
for (var i = 2; i <= 39; i++) {
var date = sheet.getRange(i, 2).getValue();
var start = parseTime(sheet.getRange(i, 3).getDisplayValues().toString() ) ;
var end = parseTime(sheet.getRange(i, 4).getDisplayValues().toString() ) ;
var summary= sheet.getRange(i, 6).getValue();
var disc = sheet.getRange(i, 7).getValue();
add_bsf_event(date, start, end, summary, disc);
}
}
function add_bsf_event(dateIn, start, end, summary, disc){
start_date= new Date(dateIn.getYear(), dateIn.getMonth(), dateIn.getDate(), start.getHours(), start.getMinutes(),0,0);
end_date = new Date(dateIn.getYear(), dateIn.getMonth(), dateIn.getDate(), end.getHours(), end.getMinutes(),0,0);
...
CalendarApp.getCalendarById(calendarId).createEvent(summary, start_date, end_date);
}
它在夏令时除外。在 Google 日历中的 2017 年 3 月 13 日之后开始的事件是 1 小时后请求(晚上 7:55 而不是 6:55pm)。
我试过:
- 正在寻找接受当地时间的 Google 日历方法(又名发送 6:55PM 和 Google 日历 API 将其转换为 UTC)
- 正在寻找将本地时间转换为 UTC 的本机 JS 方法。
未能找到任何一种解决方案。是否有我没有找到或 different/better 解决此问题的方法?
您可以尝试查看Google日历APIdocumentation,它在这里提到您可以为事件的开始和结束使用单独的时区。
现在,对于转换时区的方法,我想这个tutorial可以帮到你。它在此处逐步说明了实现此转换所需执行的操作。
有关详细信息,请查看此相关 SO question,即使此代码位于 JAVA。
我的解决方案是使用 Google 日历 Ruby API 插入事件。设置起来有点痛苦,但是一旦我建立了连接并下载了样板代码,Ruby 就可以完美地处理夏令时的变化。
Google 快速入门指南做得不错: https://developers.google.com/google-apps/calendar/quickstart/ruby
但是,如果您的 运行 在 Windows 上,SSL 证书可能无法验证;您可以通过以下方式禁用它:
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Ruby 我用来插入事件的方法:
def insert_event(summary, description, start_time, end_time, location, cal_id='primary')
event = Google::Apis::CalendarV3::Event.new({
summary:summary,
#color_id:5,
location:location,
description:description,
start:{date_time:start_time.to_datetime.rfc3339},
end:{date_time:end_time.to_datetime.rfc3339},
#reminders:{use_default: true}
})
#puts event.to_json
result = $service.insert_event(cal_id, event)
#puts result
puts "Event created: #{result.html_link}"
end