如何使用当地时间创建Google日历活动?

时间:2016-08-15 07:28:09

标签: javascript google-api google-sheets google-calendar-api dst

我正在尝试从Google电子表格中创建Google日历活动:

示例电子表格:

sample event spreadsheet

(细节和日期是不规则的,所以简单的重复事件不会安静切割它)

代码:

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);
}

除日光节省时间外,它适用。从2017年3月13日开始,Google日历中的活动将在1小时后发出请求(下午7:55而非下午6:55)。

我试过了:

  1. 寻找可接受当地时间的Google日历方法(又名发送时间为下午6:55,Google Calendar API将其转换为UTC)
  2. 寻找将本地时间转换为UTC的原生JS方法。
  3. 无法找到任何解决方案。是否有一个我没有找到或有不同/更好的方法解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以尝试查看Google Calendar API documentation,它在此处提到您可以使用单独的时区来开始和结束活动。

现在,对于转换时区的方法,我认为tutorial可以帮助您。它为了实现这种转换,一步一步地解释了你需要做的事情。

有关详细信息,请检查此相关SO question,即使此代码位于JAVA中。

答案 1 :(得分:0)

我的解决方案是使用Google Calendar 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