Dates, Timezones und Wandlung

MattyDE

Mitglied
Uhhh... ich bekomms einfach nicht hin ;(

Gegeben ist ein String "15.02.2011 10:50:12" von dem ich weiß dass er UTC/GTM darstellt

Diesen kann ich mit SimpleDateFormat auch toll in ein Date Objekt parsen.

Leider schaffe ich es um verrecken nicht dieses Date in eine andere Zeitzone zu bekommen.

Als Ergebnis möchte ich ein Date (oder ein timestamp long) dass "15.02.2011 10:50:12" zum Beispiel in GMT-8:00 beinhaltet. Also wenn ich es ausgeben würde (oder den Timestamp umrechne) "15.02.2011 2:50:12"

Ich habe wirklich alles probiert. Sowohl SimpleDateFormat.setTimeZone als auch den Weg über ein oder zwei GregorianCalendar Objekte.

Weiß jemand Rat?

Ist Input: Date in UTC + TimeZone Objekt in das ich wandeln möchte
Soll Output: Date in dieser TimeZone

PS: Ich weiß dass ein Date keine TimeZones kennt, ich möchte auch nicht, dass das Date "weiß" dass es jetzt eine andere TimeZone ist - es soll sich einfach nur die Zeit darin der TimeZone anpassen.

Danke für jegliche Tipps und Lösungsvorschläge.

Bestimmt ist die Lösung ganz einfach.. aber ihr wisst ja wie das ist mit dem Wald und den Bäumen :oops:
 

jgh

Top Contributor
und das funktioniert nicht?
Java:
public static void main(String[] args) {
		Calendar c = new GregorianCalendar();
		c.set(Calendar.DAY_OF_MONTH, 15);
		c.set(Calendar.MONTH, 01);
		c.set(Calendar.YEAR, 2011);
		c.set(Calendar.HOUR_OF_DAY, 10);
		c.set(Calendar.MINUTE, 50);
		c.set(Calendar.SECOND, 12);
		c.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
		System.out.println(c.getTime());
		Date d = c.getTime();
		System.out.println(d);

	}
 

MattyDE

Mitglied
Hast du es selber versucht?

Java:
Calendar c = new GregorianCalendar();
         c.set(Calendar.DAY_OF_MONTH, 15);
         c.set(Calendar.MONTH, 01);
         c.set(Calendar.YEAR, 2011);
         c.set(Calendar.HOUR_OF_DAY, 10);
         c.set(Calendar.MINUTE, 50);
         c.set(Calendar.SECOND, 12);
         System.out.println(c.getTime());
         c.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
         System.out.println(c.getTime());
         Date d = c.getTime();
         System.out.println(d);
         System.out.println(d.getTime());

gibt
Code:
Tue Feb 15 10:50:12 CET 2011
Tue Feb 15 10:50:12 CET 2011
Tue Feb 15 10:50:12 CET 2011
1297763412915
aus wobei der timestamp wieder "15. Feb 2011 10:50:12" darstellt -__-

Mein Ziel ist es ja den Timestamp der Zeit in dieser Zeitzone zu bekommen.
 

MattyDE

Mitglied
Ich erziele keine Erfolge :(

Java:
 // "15.06.2011 10:50:12"
		 TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
		 Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
         cal.set(Calendar.DAY_OF_MONTH, 15);
         cal.set(Calendar.MONTH, 5);
         cal.set(Calendar.YEAR, 2011);
         cal.set(Calendar.HOUR_OF_DAY, 10);
         cal.set(Calendar.MINUTE, 50);
         cal.set(Calendar.SECOND, 12);
         System.out.println(cal.getTime());
         TimeZone tz = TimeZone.getTimeZone("PST");
         cal.setTimeZone(tz);
         System.out.println("Timezone Offset: " + tz.getOffset(cal.getTime().getTime()) / 1000 / 60 / 60);
         System.out.println("Calendar Hour: " + cal.get(Calendar.HOUR_OF_DAY));
         System.out.println("Calendar Date: " + cal.getTime());
         Date d = cal.getTime();
        
         System.out.println("Timestamp: " + d.getTime());
         System.out.println("-------");
         
         Calendar newCal = new GregorianCalendar(tz);
         newCal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
         TimeZone.setDefault(tz);
         newCal.setTimeZone(tz);
         d = newCal.getTime();
         System.out.println("Calendar Neu Timestamp:" + newCal.getTimeInMillis());
         
         System.out.println("Date: " + d);
         System.out.println("Date Timestamp: " + d.getTime());

Ausgabe:
Code:
Wed Jun 15 10:50:12 UTC 2011
Timezone Offset: -7 <- ist richtig 
Calendar Hour: 3 <- würde auch stimmen
Calendar Date: Wed Jun 15 10:50:12 UTC 2011
Timestamp: 1308135012061
-------
Calendar Neu Timestamp:1308135012061 <- stellt "15. Jun 2011 12:50:12" dar =(
Date: Wed Jun 15 03:50:12 PDT 2011
Date Timestamp: 1308135012061

wir ihr seht ändert sich der Timestamp im Date nie... ich weiß nicht was ich noch versuchen soll?

-7 würde passen für PST zu UTC mit der aktuellen Sommerzeit.


Echt zum verzweifeln! ;(
 

jgh

Top Contributor
ich bekomme folgende Ausgabe:
[xml]Tue Feb 15 03:50:12 CET 2011
Tue Feb 15 03:50:12 CET 2011[/xml]

mmmh...
 

jgh

Top Contributor
mmmh, entweder stehe ich komplett auf dem Schlauch...warum und wie soll sich denn die Timestamp ändern? Die ist unabhängig von irgendeiner Zeit, die daraus gewonnen wird.

während es hier 11Uhr ist, ist es bspw in West-Australien 17 Uhr und die beiden würden die gleiche Anzahl an ms liefern, wenn auf das Objekt getTime() aufgerufen würde.

Was genau willst du machen?
Dein Code liefert dir doch die richtige Zeit, nur dass er dir sagt...dass die Zeit im ms für dein
Code:
cal
und
Code:
newCal
die gleiche Zeit beschreiben?!!!
 

MattyDE

Mitglied
Ich möchte im prinzip nur dass ich von 10:50h den Timezone Offset rausrechnen kann für eine bestimmte TimeZone (inkl beachtung von Sommer und Winterzeit und was weiß ich)
 

jgh

Top Contributor
[java=13] System.out.println("Timezone Offset: " + tz.getOffset(cal.getTime().getTime()) / 1000 / 60 / 60);[/code]

das hast du doch?
 

MattyDE

Mitglied
Jo, ich hab es jetzt eben grad auch hinbekommen mit

Java:
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
         cal.set(Calendar.DAY_OF_MONTH, 15);
         cal.set(Calendar.MONTH, 5);
         cal.set(Calendar.YEAR, 2011);
         cal.set(Calendar.HOUR_OF_DAY, 10);
         cal.set(Calendar.MINUTE, 50);
         cal.set(Calendar.SECOND, 12);
         System.out.println(cal.getTime());
         TimeZone tz = TimeZone.getTimeZone("PST");
         cal.setTimeZone(tz);
                
         int offset = tz.getOffset(cal.getTime().getTime());
         System.out.println(cal.getTime());
         
         cal.add(Calendar.MILLISECOND, offset);
         
         Date d = cal.getTime();
         System.out.println(cal.getTime());
         System.out.println(d);
         System.out.println(d.getTime());

aber schon nervig so wie es ist <_<
 

Ähnliche Java Themen

Neue Themen


Oben