时区列表问题

时间:2009-08-11 04:51:14

标签: time erlang timezone

对于我的应用程序,我正在从谷歌日历导入日历事件。我面临的唯一问题是时区列表。我得到时区作为谷歌日历xml的输出,我必须检查时区列表并相应地添加时间...所以我从哪里可以得到这个标准时区列表..或其他一些替代方案来实现相同

3 个答案:

答案 0 :(得分:2)

如果您使用的是Java,请使用Joda Time - Google日历提供的时区ID将是Joda Time理解的时区ID。标准的TimeZone类也可以理解它,但我认为Joda更有可能。

假设您看到了与事件同时发生的所有VTIMEZONE内容,您可以忽略详细信息 - 只需使用ID。

不幸的是,有一些时区ID随着时间的推移而发生了变化 - 我不记得任何例子,但如果您提供了“旧”名称,则可能需要进行一些翻译。

如果您使用的是.NET,那么您确实需要使用.NET 3.5和TimeZoneInfo类。不幸的是,它使用Windows名称而不是Olson ID,但是在某处可以使用翻译列表(如果需要,我可以将其挖掘出来)。

如果您不使用这些平台中的任何一个,则基本上需要找到支持Olson Zoneinfo names的库。 (该维基百科文章底部有一些有用的链接。)

我肯定会尝试找到一个能够根据ID向您提供相关信息的库,而不是使用日历条目中给出的规则。时区随时间而变化,zoneinfo数据库包含历史和未来信息,但无法在日历条目中轻松编码。

答案 1 :(得分:1)

这里有一些关于使用Erlang日期/时间库的好文章: http://www.trapexit.org/Category:DateTimeRecipes
希望它有所帮助。

答案 2 :(得分:1)

查看这些功能

calendar:datetime_to_gregorian_seconds({Date, Time})
calendar:gregorian_seconds_to_datetime(Seconds) -> {Date, Time}

转换为“格里高利秒”并更正时区偏移量并转换回日期格式是解决方案的一半。

在Erlang / OTP中没有库访问时区数据文件,据我所知,也没有第三方库可以访问它。因此,您可以选择将可用的时区数据库转换为可用于Erlang的数据库,或仅仅了解其中的一些数据库。

你知道,除非你想启动一个项目来读取Erlang中的时区数据。 : - )