2011-04-11 41 views
3

我遇到了以下問題,當我在虛擬linux服務器上安裝我的webapp的戰爭時出現了這個問題。那就是:我的服務器系統時間似乎是正確的,其實打字日期殼出來有:如何在Java中設置默認時區並控制日期存儲在數據庫中的方式?

Mon Apr 11 11:47:30 CEST 2011 

這是我的「掛鐘時間」。即使MySQL的正常工作,如果我現在要做的(選擇),我得到:

mysql> select now() 
    -> ; 
+---------------------+ 
| now()    | 
+---------------------+ 
| 2011-04-11 11:52:57 | 
+---------------------+ 
1 row in set (0.01 sec) 

但我的應用程序(Spring + Hibernate的上的Java6 + tomcat的6)將保存在數據庫裏的每個日期與GMT時區(和時間與GMT的差異正確地抵消了,這是好的)。現在的問題是,我與GMT顯示所有日期,即使我做的:

static final DateFormat format = new SimpleDateFormat(
      "dd/MM/yyyy 'alle' HH:mm", Locale.ITALY); 

我沒有得到正確的時間偏移,但他們仍然在GMT,他們顯示GMT,如果我把Z(即顯示時區)。

在Windows下,我將日期值存儲在mySQL的本地時區中。所以在我開發的Windows機器上,我將在CEST中擁有所有的日期。這很煩人,因爲我不知道如何預測系統的行爲方式,我必須進行無聊的測試並弄清楚如何改變這一點。

你見過這個問題嗎?如何處理它?

回答

1
SimpleDateFormat sf1 = new SimpleDateFormat("dd/MM/yyyy 'alle' HH:mm:ss"); 
     sf1.setTimeZone(TimeZone.getTimeZone("Europe/Rome")); 
     System.out.println(sf1.format(new Date())); 

// List all Timezone 
     System.out.println(Arrays.asList(TimeZone.getDefault())); 
+0

這很好。無論如何,我如何控制hibernate/mysql存儲日期的方式?我的意思是我注意到在Linux上它使用了Windows CEST上的GMT。我想把這一切都設置爲格林尼治標準時間,這樣沒有人會感到困惑。 – gotch4 2011-04-11 13:15:26

+0

@ gotch4:請看這篇文章http://stackoverflow.com/questions/5617459/convert-utc-time-t0-local-time-in-java-or-groovy/5618268#5618268。 – 2011-04-11 14:17:20

2

DateFormat確實支持時區的概念。添加類似:

format.setTimeZone(TimeZone.getTimeZone("Europe/Rome"); 
-1

的PreparedStatement ST = CON .prepareStatement(「插入knjiga_osisi(rb_knjiz,Inv_br,Naziv_os,datum_k,rb_pk,OPIS,ulaz,izlaz,stanje,osnovica_zam,otpis,sadasnjav ,vrednost_pp,rashodovanav)值(?,?,?,STR_TO_DATE(?,'%d-%m-%Y'),?,?,?,?,?,?,?,?,?,?)「 );

這是java的代碼。 MySQL的 - 的java歐洲日期格式

這一行是日期

STR_TO_DATE(? '%D-%間 - %Y')

U可以在MySQL僅日期行測試:

SELECT ID,DATE_FORMAT(Date,'%d-%M-%Y')FROM table1;