获取给定TZID和当地时间的UTC时间

时间:2014-02-06 07:48:11

标签: javascript timezone icalendar momentjs rfc5545

我正在尝试解析应用程序中的.ics文件。我的应用程序有服务器端java层和客户端javascript部分。我正在使用ical4j库来解析它。

问题是DTSTART事件有时不是UTC格式。每当它不在UTC .ics文件中有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()

是不是可以从.ics文件中按原样使用TZID(即NorthAmerica / Eastern)? 还有其他任何方式或JS库可以给我UTC所有时区,还考虑遵守?

1 个答案:

答案 0 :(得分:2)

你应该知道icalendar规范RFC5545在TZID中明确指出:

  

本文档未定义命名约定            时区标识符。实施者可能想要使用命名            在现有时区规范中定义的约定            作为公共领域的TZ数据库[TZDB]。规范            此处未解决全局唯一时区标识符            文件,留待将来学习。

如此清楚,虽然America/Toronto列在Olsson数据库中(请参阅here),America/Eastern并不能解释为什么您的JS库无法识别它。

对于健壮的设计,您需要在服务器端转换为UTC或具有能够解析ICS VTIMEZONE组件的实际JS类。