我需要比较时区,例如亚洲/新加坡< UTC<太平洋/火奴鲁鲁. 我正在使用
java.util.TimeZone
(没有实现
Comparable
).
由于关于将日期与不同时区进行比较的大量问题,我对现有实施的搜索未获成功.
问题:Comparator< TimeZone>的正确实现是什么?这将解决这个问题(如果适用的话,是什么让它比其他解决方案更好)?
请注意,我无法使用Joda Time来解决此问题,因此“使用Joda Time”不是有效的答案.
编辑清晰
<上面的符号没有明确定义.我的特定用例只需要从东到西的简单“地理”排序.正如评论所指出的,更先进和可推广的解决方案将考虑时间因素,如夏令时和历史GMT偏移变化.所以我认为我们可以考虑两个排序,每个排序需要不同的比较器< TimeZone>执行:
>严格地理(当前UTC) – 由my answer处理.
>对当地或民用时间变化敏感 – 于rgettman’s answer处理.
解决方法
一个人可能能够创建一个Comparator< TimeZone>考虑到时区差异. TimeZone可能会或可能不会考虑夏令时,这会调整原始偏移,从而搞乱原始偏移比较. TimeZone类似乎支持基于2个getOffset方法的调整,但它们需要一个引用日期.怎么样:
public class TimeZoneComparator implements Comparator<TimeZone> { private long date; public TimeZoneComparator(long date) { this.date = date; } public int compare(TimeZone tz1,TimeZone tz2) { return tz2.getOffset(this.date) - tz2.getOffset(this.date); } }