我有以下问题,当我在虚拟linux服务器上安装webapp的war时出现。它是这样的:我的服务器系统时间似乎正确,实际上在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)
但是我的应用程序(Java6上的Spring + hibernate + tomcat 6)将使用GMT时区将每个日期保存在DB中(并且时间已正确偏移了与GMT的时差,这很好)。现在的问题是,即使我这样做,我也会使用GMT显示所有日期:
static final DateFormat format = new SimpleDateFormat( "dd/MM/yyyy 'alle' HH:mm", Locale.ITALY);
我没有正确抵消小时,但是如果我在模式中加上Z(显示时区),它们将保留在GMT中,并显示GMT。
在Windows下,我将日期值存储在mySQL的本地时区中。因此,在我开发的Windows计算机上,所有日期都在CEST中。这很烦人,因为我不知道如何预测系统的行为方式,因此我必须进行无聊的测试并弄清楚如何进行更改。
你见过这个问题吗?怎么处理呢?
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()));