一尘不染

如何在Java中设置默认时区并控制日期在DB上的存储方式?

hibernate

我有以下问题,当我在虚拟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中。这很烦人,因为我不知道如何预测系统的行为方式,因此我必须进行无聊的测试并弄清楚如何进行更改。

你见过这个问题吗?怎么处理呢?


阅读 250

收藏
2020-06-20

共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()));
2020-06-20