# JavaVM Zeit Windows 7



## adalse0 (1. Apr 2010)

Hallo zusammen,

beim Umstieg von XP auf Windows 7 habe ich folgendes merkwuerdiges Verhalten beobachtet:

In der Konsolenausgabe vom JBoss ist es durchweg 2 Studen frueher als meine Systemzeit.
Hab dann ein bisschen rumprobiert und mir nen Yweiyeiler geschrieben der die aktuelle Zeit ausgibt:


```
import java.util.Calendar;
import java.util.GregorianCalendar;

public class DateTest {
	
	public static void main(String[] args) {
		Calendar today = GregorianCalendar.getInstance();
		System.out.println(today.getTime());
	}

}
```

Wenn ich diesen Code nun direkt in Eclipse ausfuehre bekomme ich: Thu Apr 01 14:39:34 GMT 2010 (sprich genau wie JBossausgabe 2 Stunden zu frueh)

Wenn ich meine TestKlasse allerdings per Kommandozeile ausfuehre 'java DateTest' erhalte ich: Thu Apr 01 16:40:51 CEST 2010 (sprich die korrekte Zeit)
Uebrigens machts keinen Unterschied ob von der Windows Kommandozeile aus oder von Cygwin.

Hat irgendjemand eine Ahnung woran das liegen koennte?

PS: Grade ist mir aufgefallen woran es liegt, dass ich auf Kommandozeile ne andere Zeit bekomme: Fuer den JBoss und in eclipse nutze ich explizit 1.5.0_07. Wenn ich auf Kommandozeile sage 'java --version' krieg ich 1.6.0_18, sprich da wird die neuere Version verwendet ....

Wie krieg ich jetzt meine 1.50._07 VM auch dazu die richtige Zeit zu nutzen?


----------



## function (1. Apr 2010)

die zeit stimmt schon, das eine ist GMT greenwich mean time und das andere CEST central european summer time
CEST := GMT+2h


----------



## adalse0 (1. Apr 2010)

Danke function,
aber das ist mir schon klar.

Ich moechte aber dass meine 1.5.0_07 VM die CEST verwendet.

Denn die ist auf meinem System Standard und die 1.6.0_irgendwas VM erkennnt das ja auch richtig.

Hab grade auch noch probiert den JBoss mit: -Duser.timezone=Europe/Berlin zu starten,
was auch klappt,
aber wenn dann will ich das irgendwo global setzen.

Ne Umgebungsvariable JAVA_OPTS = -Duser.timezone=Europe/Berlin
tut naemlich leider fuer den JBoss ihren Zweck, aber eclipse z.B. scheint sich nicht dafuer zu interessieren...


----------



## eRaaaa (1. Apr 2010)

Mhm, hilft da eig. so etwas wie

```
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin"));
```

oder beim GregorianCalendar

```
Calendar today = GregorianCalendar.getInstance(TimeZone.getTimeZone("Europe/Berlin"));
//bzw. das :
Calendar today = GregorianCalendar.getInstance();
today.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
```

bzw. allgemein TimeZone (Java Platform SE 6) ??

(p.s.: in eclipse kann man bei "Run Configurations..."-->"Arguments" auch VM arguments einstellen...)


----------



## adalse0 (1. Apr 2010)

Grundsaetzlich kann man so schon die Timezone setzen,
aber wie gesagt mir geht es um die Standard-Zeit der Java VM auf meinem System...

Mit deinem Ansatz eRaaa muesste ich ja den JBoss source code modifizieren,
was jetz ansicht nicht sooo das Ding waere,
aber wenn ich dann beim naechsten Java Programm auch wieder gern die richtige Zeit haette,
kompilier ich mir das dann auch wieder selbst?!?

Erstens mal kanns ja das nicht sein und ausserdem ist spaetestens bei nicht quelloffnen Programmen schluss.


----------



## Empire Phoenix (1. Apr 2010)

Wie wärs denn mittem Vm update?

Ich meine du fragst gerade, wie kann ich nen Trabbi so bauen, dass er ein Porsche ist? Mit viel arbeit oder indem du gleich den Porsche nimmst


----------



## adalse0 (1. Apr 2010)

Hallo Empire,

zum Einen ist ein Vergleich Porsche <-> Trabbi vielleicht ein gaaaaanz kleines bisschen uebertrieben,
ausserdem geht es hier darum dass 50 (oder was weiss ich wieviele genau) Entwickler die an mehreren Softwareprojekten arbeiten alle ein Versionsupdate durchfuehren muessen, der Code muss 100%ig so laufen wie unter 1.5, buildfiles muessen ggf. angepasst werden, installationsanleitungen muessen aktualisiert werden, diverse nightly build umgebungen muessen umgestellt werden, unseren Kunden schreib ich dann auch einfach mal kurz ne mail sie solln doch bitte kurz updaten ...

Ist also alles nicht ganz so locker, wie du vielleicht denkst.

Und um wieder deinen Vergleich bzgl. massig Arbeit aufzugreifen:

Ich vermute dass es sich bei dem Problem um einen Bug handelt der relativ leicht zu beheben ist,
wenn man wuesste wie.

Was meiner meinung nach passiert,
wenn ich


```
Calendar today = GregorianCalendar.getInstance();
```

sage - wo er ja normalerweise versucht die Timezone entsprechend der Systemzeit zu setzten - ist, dass irgendwas schieflaeuft und er deshalb auf die defaultmaessige GMT zurueckfaellt.

Einen aehnlich bug gab es mal auf Unix Systemen, 
das Problem war irgendwie, 
dass wenn er in der ersten Datei wo er die Systemzeitzone auslesen wollte Unsinn gefunden hat,
auf GMT zurueckging.
Wenn garnichts in der Datei stand, hatte er wie gewollte die naechte in der Reihe versucht,
oder irgendwie so aehnlich ...

Auf jeden Fall gab es einen Workaround dazu der ca. 10s dauerte,
weil man einfach nur ein bestimmtes file anlegen musste,
worin die korrekte Zeitzone hinterlegt war.

Edit:

Was mir grade noch eingefallen ist zum Thema Trabbi-Porsche, 
wenn wir unbedingt bei diesem Vergleich bleiben wolln  

Ich will doch nur dass in meinem scheiss Trabbi die Uhr richtig geht,
andere Maengel nehm ich in Kauf...


----------



## Empire Phoenix (2. Apr 2010)

Dann die primitive Lösung, nimm einfach eine einzelne uhr mit, sprich bau dir selber ein uhr klasse die damit umgeht


----------



## adalse0 (3. Apr 2010)

Emipre ich hab mir jetzt echt Muehe gegeben,
zu erklaeren, was mein Problem ist,
aber entweder sprech in die falsche Sprache oder du checkst es einfach nicht...

Was soll ich denn bitte mit deiner selbstgebauten "Uhr Klasse" machen?

Ich will dass ein x-bliebiges Java Programm,
das ich mit der 1.5 VM unter WIN 7 starte die richtige Zeitzone nutzt, 
naemlich die Windowszeitzone, die z.B. von einer 1.6 VM auch richtig erkannt wird.


----------



## Empire Phoenix (4. Apr 2010)

Hm sieht ganz soa us, als ob es dafür keine direkte Lösung gibt, das sit kein richtiger Bug,
so wie es aussieht speichert Win7 jetzt ne Zeitzone und lässt die Uhr auf +0 laufen verrechnet das lediglich intern. vorige Windows versionen haben die System(Bios) uhr umgestellt. Genau genommen scheint das seit vista so zu sein. Dummerweise weiß die alte Vm davon nicht so richtig was. Das lößt zwar nicht dein Problem sollte aber evtl. etwas helfen. (2 Stunden differenz sind dann wohl Sommerzeit und 1+ für Zeitzone Berlin,ect)

bei den problematischen rechnern hilft dir evtl der hier weiter:
-Duser.timezone=Europe/Berlin

Zudem gehe ich jetzt mal davon aus das hauptsächlich der (Windows7) Entwickler Rechner davon betroffen ist, (wenn man als kunde die Vm wegen codestabilität nicht updated würde es mich wundern wenn man dann das windows wechselt  )


----------

