我需要比较时区,以便Asia/Singapore <UTC <Pacific/Honolulu
我正在使用 java.util.TimeZone (未实现 Comparable )。
由于对与不同时区进行比较的问题数量众多,因此我对现有实现方案的搜索失败。
问题:什么样的Comparator<TimeZone>正确实现可以解决此问题(如果适用,有什么使其比其他解决方案更好的方法)?
请注意,我无法使用Joda Time解决此问题,因此“使用Joda时间”不是有效的答案。
编辑清晰
上面的<表示法定义不充分。我的特定用例只需要从东到西的天真的“地理”顺序。正如评论所指出的那样,一种更高级,更通用的解决方案将考虑时间因素,例如夏时制和历史GMT偏移量变化。因此,我认为我们可以考虑两种排序,每种排序需要不同的Comparator<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 - 如何比较时区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15169108/

    10-10 04:20