加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何比较TimeZones

发布时间:2020-12-15 01:00:13 所属栏目:Java 来源:网络整理
导读:我需要比较时区,例如亚洲/新加坡 UTC太平洋/火奴鲁鲁. 我正在使用 java.util.TimeZone (没有实现 Comparable ). 由于关于将日期与不同时区进行比较的大量问题,我对现有实施的搜索未获成功. 问题:Comparator TimeZone的正确实现是什么?这将解决这个问题(如
我需要比较时区,例如亚洲/新加坡< 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);
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读