0

我試圖創建一個從谷歌電子表格谷歌日曆事件:如何用當地時間創建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); 
} 

而且它與抗辯工作n夏令時。在Google日曆2017年3月13日之後開始的活動在1小時後開始(7:55 pm而不是下午6:55)。

我已經試過:

  1. 尋找將接受本地時間谷歌日曆法(又稱派6:55 PM和谷歌日曆API將其轉換爲UTC)
  2. 尋找本地JS方法將當地時間轉換爲UTC。

無法找到任一解決方案。有沒有我沒有找到的或者是不同的/更好的方法來解決這個問題?

回答

0

我的解決方案是使用Google Calendar Ruby API插入事件。設置起來有點痛苦,但是一旦我建立了連接並關閉了鍋爐板代碼,Ruby就可以毫無問題地處理夏令時變化。


谷歌快速入門指南做一個體面的工作: 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 
0

您可以嘗試查看Google日曆API documentation,它在此提及您可以使用單獨的時區作爲事件的開始和結束。

現在,對於轉換時區的方法,我認爲這個tutorial可以幫助你。它在此逐步解釋爲了實現此轉換您需要執行的操作。

欲瞭解更多信息,檢查這相關的SO question即使此代碼是在JAVA。

+0

我的問題是夏令時沒有時區(所有的事件都在同一個時區)...我嘗試在Google Calendar API中指定start/end.timeZone,但它沒有任何作用。 – Nathan