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