I performed my own implementation of Comparator<TimeZone> using getRawOffset for comparison:
@Override public int compare(TimeZone tz1, TimeZone tz2) { return tz2.getRawOffset() - tz1.getRawOffset(); }
He seems to have passed a quick test:
final List<TimeZone> timeZones = Arrays.asList( TimeZone.getTimeZone("UTC"), TimeZone.getTimeZone("America/Los_Angeles"), TimeZone.getTimeZone("America/New_York"), TimeZone.getTimeZone("Pacific/Honolulu"), TimeZone.getTimeZone("Asia/Singapore") ); final List<TimeZone> expectedOrder = Arrays.asList( TimeZone.getTimeZone("Asia/Singapore"), TimeZone.getTimeZone("UTC"), TimeZone.getTimeZone("America/New_York"), TimeZone.getTimeZone("America/Los_Angeles"), TimeZone.getTimeZone("Pacific/Honolulu") ); Collections.sort(timeZones, new Comparator<TimeZone>() { @Override public int compare(TimeZone tz1, TimeZone tz2) { return tz2.getRawOffset() - tz1.getRawOffset(); } });
But I'm still wondering if there are pitfalls for this solution and / or if something is preferable.
source share