Prev: Daylight Saving Shift
Next: The Nike Shox shoes were the product of a sixteen years of research in the Nike Labs. In the fall of 2000, the Nike Shox system was revealed to the world. Nike unveiled this top secret line of shoes to the world in 3 models, the Nike Shox R4 (runn
From: markspace on 2 Nov 2009 19:51 Wojtek wrote: > How would you sort timezones? > > I am trying to sort them according to their offset from UTC. I cannot > use a TreeMap because there are many timezones with the same offset, > which of course over-writes the previously put timezone. > > The preferred sort would be offset, then display name. > /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package sorttimezone; import java.util.Arrays; import java.util.Comparator; import java.util.TimeZone; /** * * @author Brenden */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here String [] zonesIDs = TimeZone.getAvailableIDs(); TimeZone [] allTZ = new TimeZone[zonesIDs.length]; for( int i=0; i< allTZ.length; i++ ) { allTZ[i]=TimeZone.getTimeZone( zonesIDs[i] ); } Arrays.sort( allTZ, new SortByOffsetAndName() ); for( TimeZone zone : allTZ ) { System.out.println( zone.getDisplayName() + ": "+ zone.getRawOffset()/1000/60/60 ); } } } class SortByOffsetAndName implements Comparator<TimeZone> { public int compare( TimeZone o1, TimeZone o2 ) { if( o1.getRawOffset() != o2.getRawOffset() ) { return o1.getRawOffset() - o2.getRawOffset(); } return o1.getDisplayName().compareTo( o2.getDisplayName() ); } }
From: markspace on 2 Nov 2009 20:06 Wojtek wrote: > I retrieve them using the left names, but the .getDisplayName() returns > the right side. Which throws the sorting out. > Instead of using getDisplayName() (which was the same thing I did, in my example I posted), use getID(), that returns the string on the left in your table. public int compare( TimeZone o1, TimeZone o2 ) { if( o1.getRawOffset() != o2.getRawOffset() ) { return o1.getRawOffset() - o2.getRawOffset(); } return o1.getID().compareTo( o2.getID() ); } > Ok, I can make this work. Funny how actually _asking_ a question can > lead to an answer... It works that way for pretty much everyone. ;)
From: Lew on 2 Nov 2009 20:17 Wojtek wrote: > How would you sort timezones? Do you mean 'java.util.TimeZone'? > I am trying to sort them according to their offset from UTC. I cannot > use a TreeMap because there are many timezones with the same offset, > which of course over-writes the previously put timezone. There's no "of course" about that if you are using your "preferred sort". Why would you use any kind of 'Map' rather than a 'Collection'? > The preferred sort would be offset, then display name. 'TimeZone' can easily be a map key, yes, even for a 'TreeMap'. I fail to see the problem. You simply compare based on your "preferred sort". I'd be more concerned about relocation of a key when the offset changes for DST. But perhaps you're only building this structure for a given moment in time and that isn't a concern for you. Regardless, here's uncompiled, off-the-cuff code, using a 'Set' instead of a 'Map': public class SortedZone { private long ref = System.currentTimeMillis(); private final TreeSet <TimeZone> zones = new TreeSet <TimeZone> ( new Comparator <TimeZone> () { @Override public int compare( TimeZone t0, TimeZone t1 ) { return (t0 == null? (t1 == null? 0: -1) : t1 == null? 1 : t0.getOffset( ref ) > t1.getOffset( ref )? 1 : t0.getOffset( ref ) < t1.getOffset( ref )? -1 : t0.getDisplayName().compareTo( t1.getDisplayName() ) ); } } ); // cover methods for the Set ... } -- Lew
From: Roedy Green on 2 Nov 2009 22:13 On Mon, 02 Nov 2009 16:09:42 -0800, Wojtek <nowhere(a)a.com> wrote, quoted or indirectly quoted someone who said : > >I am trying to sort them according to their offset from UTC. I cannot >use a TreeMap because there are many timezones with the same offset, >which of course over-writes the previously put timezone. > >The preferred sort would be offset, then display name. I would create my own TimeZone Object with the fields I need then cook up a Comparable/Comparator for it. see http://mindprod.com/applet/comparatorcutter.html to generate the code. -- Roedy Green Canadian Mind Products http://mindprod.com An example (complete and annotated) is worth 1000 lines of BNF.
From: Lew on 3 Nov 2009 00:56 Wojtek quoted or indirectly quoted someone who said : >> I am trying to sort them according to their offset from UTC. I cannot >> use a TreeMap because there are many timezones with the same offset, >> which of course over-writes the previously put timezone. >> >> The preferred sort would be offset, then display name. Roedy Green wrote: > I would create my own TimeZone Object with the fields I need then cook > up a Comparable/Comparator for it. Wojtek was speaking of java.util.TimeZone, judging by the fields he mentioned. -- Lew
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 4 5 6 Prev: Daylight Saving Shift Next: The Nike Shox shoes were the product of a sixteen years of research in the Nike Labs. In the fall of 2000, the Nike Shox system was revealed to the world. Nike unveiled this top secret line of shoes to the world in 3 models, the Nike Shox R4 (runn |