微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何比较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);
   }
}

原文地址:https://www.jb51.cc/java/239819.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐