TZ Var到Java TimeZone?

时间:2009-09-05 02:49:58

标签: java timezone

我需要从以下形式的Unix TZ环境变量转换:

stdoffset[dst[offset][,start[/time],end[/time]]]

进入Java TimeZone对象。

例如,将AEST-10AEDT-11,M10.1.0/02:00:00,M4.1.0/03:00:00转换为表示“Australia \ Sydney”的Java TimeZone对象。在我自己编写代码之前,我想知道我不是在再次发明轮子,所以有人知道是否有可以执行此操作的库吗?

1 个答案:

答案 0 :(得分:3)

编写这样的转换程序真的很难。在Unix上,您可以拥有自定义的日光规则,而Java则不提供此类设施。可以通过tzfile搜索试图找到匹配但你必须将TZ规则转换为tzfile使用的格式,这是一项艰巨的任务。

为什么不使用Java中使用的相同区域ID?例如,您可以将TZ设置为

出口TZ =澳大利亚/悉尼

大多数现代Unix系统(如Linux,Mac OS X)都支持此功能。搜索/etc/zoneinfo/usr/share/zoneinfo。如果您可以找到适合您时区的文件,则该ID将有效。

我也开始使用自定义TimeZone来处理旧的TZ格式,但我能够说服系统管理员使用区域ID,所以我没有完成它。困难的部分是实现useDaylightTime(),因为TZ中使用的规则非常复杂。