# Datum und Uhrzeit in andere Zeitzone umrechnen



## AlexHind (26. Sep 2016)

Ich versuche verzweifelt ein Datum und eine Uhrzeit die ich in UTC habe in die 'deutsche' Zeit umzurechnen, also
26.09.2016 15:11 in UTC
ergibt
26.09.2016 17:11 für München.

Ich habe hier schon viel gelesen und probiert, aber es nicht geschafft die Zeit umzurechnen. Vielleicht kann mir ja jemand einen Tipp geben.
Danke


----------



## VfL_Freak (26. Sep 2016)

Moin,


AlexHind hat gesagt.:


> Ich habe hier schon viel gelesen und probiert


warum beschreibst Du nicht, was Du versucht hast??
Möchstest Du ggf. alle Tipps nochmal zu bekommen?

Vielleicht war ja auch Dein Ansatz nur nicht ganz richtig!
Poste eine mal Deinen Ansatz (Code-Tags nicht vergessen) und dann schauen wir weiter ...

Fertigen Code wird es hier nicht geben 
Gruß Klaus


----------



## AlexHind (26. Sep 2016)

Hallo Klaus,
vielen Dank für deine Antwort. Ich habe folgendes versucht:


```
DateFormat df = DateFormat.getDateTimeInstance();
TimeZone tz = TimeZone.getTimeZone("Europe/Berlin");
df.setTimeZone(tz);
Date d = df.parse("31.08.2015 14:06:56 UTC");
System.out.println(d);
System.out.println(df.format(d));
```

Hier habe ich versucht die Differenz in Stunden zu berechnen:

```
TimeZone tz1 = TimeZone.getTimeZone("GMT");
TimeZone tz2 = TimeZone.getTimeZone("Europe/Berlin");
long timeDifference = tz1.getRawOffset() - tz2.getRawOffset() + tz1.getDSTSavings() - tz2.getDSTSavings();
System.out.println("differenz " + timeDifference);
```

und noch einiges mehr .....

Mein Gedankengang war, dass ich eine Zeit in UTC vorgebe und dann mit einer der Datumsfunktionen diese dann in die MEZ bzw. MESZ umrechnen lasse. Ein weiterer Ansatz war, dass ich die Zeitdifferenz zwischen den Zeitzonen ausrechne und sie dann auf die UTC-Zeit addiere, aber auch hier bin ich gescheitert.

Das mit dem fertigen Code ist mir auch klar 
LG Alexandra


----------



## VfL_Freak (26. Sep 2016)

hmm, scheint aber doch soweit zu funktionieren ..... 

Ich habe es jetzt so versucht (mit kleinen Anpassungen, um es hioer compiliert zu bekommen)

```
DateFormat df = DateFormat.getDateTimeInstance();
TimeZone tz = TimeZone.getTimeZone( "Europe/Berlin" );
df.setTimeZone( tz );
Date d;
try
{
     d = df.parse( "31.08.2015 14:06:56 UTC" );
     System.out.println( d );
} catch (ParseException e) 
{
     // TODO Auto-generated catch block
     e.printStackTrace();
}
     
TimeZone tz1 = TimeZone.getTimeZone("GMT");
TimeZone tz2 = TimeZone.getTimeZone("Europe/Berlin");
long timeDifference = tz1.getRawOffset() - tz2.getRawOffset() + tz1.getDSTSavings() - tz2.getDSTSavings();
System.out.println( "differenz " + String.valueOf(timeDifference) );
```
die Ausgabe:
*Mon Aug 31 14:06:56 CEST 2015*
*differenz -7200000*
ist IMHO doch korrekt !! 

Gruß Klaus


----------



## JStein52 (26. Sep 2016)

VfL_Freak hat gesagt.:


> ist IMHO doch korrekt !!


Der Meinung war ich auch, aber sie hatte nicht dazugeschrieben was bei ihr ihrer Meinung nach falsch war.


----------



## VfL_Freak (27. Sep 2016)

Moin,


JStein52 hat gesagt.:


> aber sie hatte nicht dazugeschrieben was bei ihr ihrer Meinung nach falsch war


ich befürchte, dass ihr nicht klar ist, dass *-720000* gleich *-2 Stunden* sind !! 
Gruß Klaus


----------



## AlexHind (27. Sep 2016)

ja, mit den -7200000 hatte ich ein Brett vor dem Kopf  - Asche auf mein Haupt  - und ich bin weiter gekommen. Ich habe nun folgenden Code - aber vermutlich wieder irgendwie zu kompliziert und von hinten durch die Brust


```
TimeZone tz = TimeZone.[I]getTimeZone[/I]("Europe/Berlin");


String string = "2016-12-31 14:06:56";

SimpleDateFormat sdfToDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date1 = sdfToDate.parse(string);

System.out.println("date1 " + date1);

int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(date1) ? tz.getDSTSavings() : 0);



Calendar cal = Calendar.[I]getInstance[/I]();

cal.setTime(date1);

System.out.print("test " + cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DAY_OF_MONTH) + " ");

System.out.println("zeit " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));



cal.add((GregorianCalendar.HOUR_OF_DAY), currentOffsetFromUTC/3600000);

System.out.print("test " + cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DAY_OF_MONTH) + " ");

System.out.println("zeit " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));
```

Jetzt habe ich noch das Problem, dass mir die führenden Nullen nicht angegeben werden, aber da kümmere ich mich morgen.

Danke Euch nochmal - ohne eure Anregung wäre ich nicht weiter gekommen 
LG Alex


----------



## Joose (27. Sep 2016)

Bitte verwende in Zukunft die Code-Tags, danke! 
[code=java] .. dein code .. [/code]


----------

