2014-02-06 84 views
0

我想解析我的應用程序中的.ics文件。我的應用程序具有服務器端Java層和客戶端JavaScript部分。我正在使用ical4j庫來解析它。獲取UTC時間給定TZID和當地時間

問題是事件的DTSTART有時不是UTC格式。並且,只要它不在UTC文件中,我就會解析VTIMEZONE組件,並從中獲取TZID屬性。

Java層最終發送JSON給客戶端。在上面提到的情況下,DTSTART,DTEND和TZID正在以JSON發送。

客戶端必須使用TZID將DTSTART和DTEND轉換爲UTC。我試着用moment.js,因爲我找不到可以做到這一點的其他API。

moment.tz("2014-02-06 05:30", "NorthAmerica/Eastern").format() 

下面moment.js是錯誤我得到的,

TypeError: Cannot call method 'rule' of undefined 

但下面的代碼工作正常,

moment.tz("2014-02-06 17:30", "America/Toronto").format() 

是沒可能使用TZID爲是(即北美洲/東部)從.ics文件? 也有任何其他方式或JS庫可以給我與所有時區的UTC並且還考慮Observance?

回答

2

你應該知道的是,的iCalendar規範RFC5545中TZID明確規定,即:

本文件並不定義命名約定 時區標識符。實施者可能希望使用現有時區規範(如 )中定義的命名 作爲公共域TZ數據庫[TZDB]。 全球唯一時區標識符的規範未在此 文檔中解決,並留待將來研究。

如此清晰而America/Toronto在奧爾森數據庫(見here)上市,America/Eastern是不是這也解釋了爲什麼你的JS庫不能識別它。

對於健壯的設計,您需要將服務器端轉換爲UTC或具有實際的JS類來解析ICS VTIMEZONE組件。