JVM和时区

And*_*rei 11 java timezone

我有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]$
Run Code Online (Sandbox Code Playgroud)

系统日期是,比如说 -

[someuser@webserver bin]$ date
Mon Aug 15 09:09:46 EST 2011
Run Code Online (Sandbox Code Playgroud)

在Web应用程序中,我在某个Calendar.getInstance().getTime()时间点拨打电话,然后在日志中打印此时间戳.

问题是这个时间戳在EDT中返回,尽管服务器的时间在EST中.因此,返回的日期比它应该晚1小时.

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

我搜索了论坛,并发现一些建议,即jvm无法正确读取系统的时区.我尝试使用-Duser.timezone=EST参数启动tomcat ,但系统会在EDT时区中保持返回时间戳.请注意 - 尝试-Duser.timezone使用非est参数似乎可行.这些问题似乎有所不同.

我的问题在某种程度上类似于这个问题.但是,我只是试图在系统所在的时区中获取日期,而没有任何特殊处理.

你能帮忙吗?

mla*_*the 7

我遇到过同样的问题.事实证明,Java正在查找/etc/sysconfig/clock文件而不是/etc/localtime文件.这是评论更多信息


Bri*_*ian 5

美国东部时间和美国东部时间非常具体,其中一个将总是"错误",取决于一年中的时间.尝试"America/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());
Run Code Online (Sandbox Code Playgroud)

有用的时区列表:

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