我需要从以下形式的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对象。在我自己编写代码之前,我想知道我不是在再次发明轮子,所以有人知道是否有可以执行此操作的库吗?
答案 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中使用的规则非常复杂。