2010-03-22 45 views
96

Bir Java programını çalıştırmaya çalışıyorum, ancak OS tanımlı bir saat dilimi yerine varsayılan GMT saat dilimini alıyor. Benim JDK sürümüm 1.5 ve işletim sistemi Windows Server Enterprise (2007)JVM TimeZone düzgün bir şekilde nasıl ayarlanır

Windows'un bir Central saat dilimi belirtildi, ancak aşağıdaki programı çalıştırdığımda, bana bir GMT süresi veriyor.

import java.util.Calendar; 

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

Burada çıkış

sun.util.calendar.ZoneInfo[id="GMT", 
offset=0, 
dstSavings=0, 
useDaylight=false, 
transitions=0, 
lastRule=null] 
Mon Mar 22 13:46:45 GMT 2010 

Ben uygulamadan dilimini ayarlamak istemiyorum lütfen unutmayın olduğunu. JVM tarafından kullanılan saat diliminin işletim sisteminde belirtilen saat olması gerektiğini istiyorum. (Bu sorunları JDK ve Microsoft Server 2003 sürüm 1.4 olan diğer sunucularda bulamıyorum).

Herhangi bir düşünce çok takdir edilecektir.

+1

Hm için, o garip. Bir JVM/OS hatası veya bazı garip yanlış yapılandırma gibi görünüyor. –

+0

'DateTest' sınıfını nasıl çağırıyorsunuz? –

+0

@matt b: Windows komut isteminden DateTest derleyip çağırıyorum. Ama bu sadece bir Test sınıfı. Orijinal sorun, IBM cognos sunucusu için bazı ETL işlemiyle gerçekleştirildi. –

cevap

155

Örneğin

-Duser.timezone=Europe/Sofia 

için JVM bu param

-Duser.timezone 

geçebilir ve bu hile yapmak gerekir. Ortam değişkeninin ayarlanması TZ de Linux'taki hile yapar.

+0

üzerinden geçebilecek herhangi bir kabuk/toplu betik aracılığıyla başlatmayı kararlaştırmak istedik. JDK DST Zaman Dilimi Güncelleme Aracı - 1.3.25'i (tzupdater) kullanmalı ve sonra JVM'yi değiştirmeliydik. önerdiğiniz gibi parametre ve nihayet sorundan kurtulduk. Bu arada, saat dilimi bilgileri bazı kayıt defterindeki Windows tarafından saklanır. Güncelleyici, kayıt defteri değerlerini de güncelledi. –

+1

JVM'yi bu parametreyi kullanarak başlatmaya çalışıyorum, ancak hiçbir değişiklik yok gibi görünüyor ... UTC'de başlamak istersem, parametre olarak ne kullanmalıyım? –

+4

java -Duser.timezone = GMT'yi deneyin ... –

21

yukarıda kabul cevap:

-Duser.timezone="Europe/Sofia" 

tam benim için işe yaramadı. Ben sadece parametreleri etrafında tırnak yoktu ne zaman başarıyla benim dilimini değiştirmek başardı: win7 ise

-Duser.timezone=Europe/Sofia 
+2

Katılıyorum. Alıntıları kaldırmak için orijinal cevabı düzenledim. – GaZ

0

Eğer JRE parametre olarak doğru zaman dilimini ayarlamak isterseniz, dosyayı düzenlemek zorunda deployment.properties dize deployment.javaws.jre.1.args=-Duser.timezone\=my_time_zone pencereler 7 günü ve JDK6 için

+0

Denedim ve işe yaramadı (jvm intellij içinden yürütüldü) – kumetix

+0

@Dave Hiç çalışmıyor ... –

9

ekleyerek yoluna c:\users\%username%\appdata\locallow\sun\java\deployment saklanan, My bilgisayara => Özellikler => Gelişmiş sistem Ayarları => Ortam Değişkenleri" altında bulunan JAVA_TOOL_OPTIONS sistem değişkeni -Duser.timezone="Europe/Sofia" eklemek zorunda ".

JAVA_TOOL_OPTIONS için başka bir özellik kümeniz varsa, yalnızca boşluk ekleyin ve ardından özellik dizenizi ekleyin.

2

Eğer Maven kullanıyorsanız:

mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....." 
31

Ayrıca aşağıdaki kodu kullanarak kodunuzda varsayılan saat dilimini ayarlayabilirsiniz.

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

Sevgiler

TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia")); 
+0

"Lütfen saat dilimini uygulamadan ayarlamak istemiyorum." – AbVog

İlgili konular