如何比较TimeZones

前端之家收集整理的这篇文章主要介绍了如何比较TimeZones前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要比较时区,例如亚洲/新加坡< 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);
   }
}

猜你在找的Java相关文章