【发布时间】:2009-08-11 04:51:14
【问题描述】:
对于我的应用程序,我从谷歌日历导入日历事件。我面临的唯一问题是时区列表。我从谷歌日历xml中获取时区作为输出,我必须检查时区列表并相应地添加时间......所以我可以从哪里得到这个标准时区列表..或其他一些替代方法来实现同样的效果.
【问题讨论】:
对于我的应用程序,我从谷歌日历导入日历事件。我面临的唯一问题是时区列表。我从谷歌日历xml中获取时区作为输出,我必须检查时区列表并相应地添加时间......所以我可以从哪里得到这个标准时区列表..或其他一些替代方法来实现同样的效果.
【问题讨论】:
如果您使用 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 数据库包含历史和未来信息,但无法在日历条目中轻松编码。
【讨论】:
这里有一些关于使用 Erlang 日期/时间库的好文章:
http://www.trapexit.org/Category:DateTimeRecipes
希望对您有所帮助。
【讨论】:
看看这些功能
calendar:datetime_to_gregorian_seconds({Date, Time})
calendar:gregorian_seconds_to_datetime(Seconds) -> {Date, Time}
转换为“公历秒”并更正时区偏移并转换回日期形式是解决方案的一半。
在 Erlang/OTP 中没有访问时区数据文件的库,据我所知,也没有第三方库可以访问它。因此,您的选择是自己将可用的时区数据库转换为 Erlang 可用的数据库,或者只了解其中的几个。
你知道,除非你想启动一个项目来读取 Erlang 中的时区数据。 :-)
【讨论】: