我遇到了以下问题,当我在虚拟Linux服务器上安装我的webapp战争时出现了这个问题。这是:我的服务器系统时间似乎是正确的,实际上shell上的输入日期是:
Mon Apr 11 11:47:30 CEST 2011
这是我的“挂钟时间”。即使mysql工作正常,如果我选择now(),我得到:
mysql> select now()
-> ;
+---------------------+
| now() |
+---------------------+
| 2011-04-11 11:52:57 |
+---------------------+
1 row in set (0.01 sec)
但是我的应用程序(Spring + hibernate on Java6 + tomcat 6)将使用GMT时区保存DB上的每个日期(并且时间与GMT的差异正确抵消,这很好)。现在问题是我用GMT显示所有日期,即使我这样做:
static final DateFormat format = new SimpleDateFormat(
"dd/MM/yyyy 'alle' HH:mm", Locale.ITALY);
我没有得到正确偏移的小时数,但它们仍保留在GMT中,如果我在模式中放置Z(显示时区),它们会显示GMT。
在Windows下,我在mySQL的原生时区存储了日期值。所以在我开发的Windows机器上,我将在CEST中拥有所有日期。这很烦人,因为我不知道如何预测系统的行为方式,我不得不做无聊的测试并弄清楚如何改变它。
你有没有见过这个问题?怎么处理呢?答案 0 :(得分:2)
DateFormat确实支持时区概念。添加如下内容:
format.setTimeZone(TimeZone.getTimeZone("Europe/Rome");
答案 1 :(得分:1)
DateFormat
不关心时区,只关心格式化。要更改为时区,您需要Calendar.setTimezone()。
答案 2 :(得分: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()));
答案 3 :(得分:-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-%间 - %Y'),,,,,,,,,,)“);??????????
这是java的代码。 Mysql - java欧洲日期格式
此行用于日期
STR_TO_DATE(?,'%d-%m-%Y')
你可以在mysql中测试日期行:
SELECT ID,DATE_FORMAT(日期,'%d-%M-%Y')FROM table1;