JVM 和时区

2022-09-04 01:14:00

我遇到了Java时区的问题,如果有人可以帮助我的话。

我有一个在tomcat 5.5上运行的Web应用程序(不确定这是否相关),具有以下JVM版本

[someuser@webserver bin]$ java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Server VM (build 1.5.0_06-b05, mixed mode)
[someuser@webserver bin]$

系统日期是,比如说 -

[someuser@webserver bin]$ date
Mon Aug 15 09:09:46 EST 2011

在 Web 应用程序中,我在某个时间点调用 ,并在日志中打印此时间戳。Calendar.getInstance().getTime()

问题是,尽管服务器的时间在 EST 中,但此时间戳在 EDT 中返回。因此,返回的日期比应有的日期晚 1 小时。

我想实现的是使返回与系统相同的时区的日期。Calendar.getInstance().getTime()

我搜索了论坛,发现了一些建议,即jvm没有正确读取系统的时区。我尝试过使用参数启动tomcat,但系统不断返回EDT时区的时间戳。请注意 - 尝试使用非est参数似乎有效。这些问题似乎具有不同的性质。-Duser.timezone=EST-Duser.timezone

我的问题与这个SO问题有些相似。但是,我只是尝试将日期与系统所在的时区相同,而无需任何特殊处理。

你能帮忙吗?


答案 1

我有同样的问题。事实证明,对我来说,Java是在文件中查找的,而不是在文件中查找的。这是为了评论更多信息/etc/sysconfig/clock/etc/localtime


答案 2

EST和EDT非常具体,其中一个总是“错误的”,这取决于一年中的时间。尝试使用“美国/New_York”的时区,以简单地获得“纽约的时间”。

例如:

    DateFormat formatterET = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz");
    formatterET.setTimeZone(TimeZone.getTimeZone("America/New_York"));

    String timestamp = formatterET.format(new Date());

有用的时区列表:

https://calendar.york.ac.uk/en/chcncpt.html#wp1056628


推荐