01. november 2011 - 18:17Der er
23 kommentarer og 1 løsning
Tidszone konvertering
Hejsa,
Så er jeg tilbage - jeg er nu løbet ind i et problem, fordi vi er skiftet til vintertid. Derfor må jeg hellere få styr på mine tidszoner nu, så jeg ikke ender med håret i postkassen, når vi skifter til sommertid igen :D Jeg har forsøgt at lege med Calendar klassen, men jeg kan sgu (heller) ikke knække denne her!
Jeg har et input der starter med et tidspunkt i 12 timers format i en String. - String time = "11:59am".
Der har jeg gjort således:
SimpleDateFormat sdfTid1 = new SimpleDateFormat("HH:mm"); Date sdfTid = sdfTid1.parse(time); Calendar cal = Calendar.getInstance(); cal.setTime(sdfTid); cal.add(Calendar.HOUR_OF_DAY, 6); sdfTid = cal.getTime(); // This will give you the time you want.
Det jeg derfor gør, er at smide det over i et Date format og så derfra videre til en Calendar - der smider jeg 6 timer oven i (konvertering fra EDT tidszone til DK). Dvs. det troede jeg - da vi så skiftede til vintertid, der skiftede EDT ikke...:S
Jeg har fået din kode til at virke - lækkert eksempel! Men den returnerer en konvertering af 11:59am til 17:59. Det er jo +6 timer?? Rimelig weird. Er det fordi lige præcis NYC er skiftet til vintertid også? Og at min kilde er noget andet end lige præcis NYC?
Det er EDT jeg prøver at ændre til DK-tid. Og jeg kan se, at formatet viser 11:59am på et tidspunkt hvor klokken i Danmark var 16:59...
Jeg har også prøvet at spytte en 04:00pm tid ind i koden - der får jeg så et output der hedder 10:00, men den skulle vel hedde 22:00? Det undrer mig lidt...
Jeg har sådan set bare stjålet din kode direkte:
System.out.println("Time " + time);
DateFormat dfest = new SimpleDateFormat("hh:mm"); dfest.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date tidEST = dfest.parse(time);
DateFormat dfmet = new SimpleDateFormat("HH:mm"); dfmet.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
Date timmet = dfmet.parse(time);
System.out.println("Let us parse as EST");
System.out.println("EST: " + dfest.format(tidEST)); System.out.println("MET: " + dfmet.format(tidEST)); System.out.println("Let us parse as MET");
Hmm, jeg får problemer fordi den dato jeg catcher den har formatet 11-1-2011. Det kan min konvertering ikke forstå... Den omdanner det til 3. juli... i år 16... Very odd!
Ja, mit spørgsmål kunne være, hvordan jeg får smidt det 0 ind foran datoen - det skal jo kun ske i månedens første 9 dage :S... eller konverteret det til noget andet, som SimpleDateFormat kan bruge?
Godt spottet - tak! :) Jeg er stadig i problemer - den tidszone konverterer for hurtigt - altså den skriver 17.59 for tidligt, og så viser den at den amerikanske tid var 12.59 - selvom oprindeligt input var 11.59... Jeg forsøger lige at arbejde videre med det og poste min løsning... - det er blevet lidt komplekst fordi jeg skal joine min dato ind i min tid, hvilket gør at jeg opretter dem som Calendar objects...
Ja, det ville jeg jo vove at påstå at jeg har, men det er sygt forvirrende når man er newbie i 16 klasser :D Jeg troede selv den kunne finde ud af det, når jeg brugte hh i stedet for HH. Det kan den (vel selvfølgelig) ikke..... Men jeg vil tro det virker med a'et tilføjet :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.