【发布时间】:2011-10-27 07:43:10
【问题描述】:
如果有人可以帮助我,我遇到了 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(),并在日志中打印此时间戳。
问题是这个时间戳在 EDT 中返回,尽管服务器的时间是在 EST 中。因此,返回的日期比应有的晚 1 小时。
我想要实现的是让Calendar.getInstance().getTime() 返回与系统在同一时区的日期。
我搜索了论坛,发现了一些关于 jvm 没有正确读取系统时区的建议。
我尝试使用-Duser.timezone=EST 参数启动tomcat,但系统不断返回EDT 时区的时间戳。请注意 - 尝试使用非 est 参数的 -Duser.timezone 似乎有效。
这些问题似乎具有不同的性质。
我的问题与this SO question 有点相似。但是,我只是想获取与系统所在时区相同的日期,没有任何特殊处理。
你能帮忙吗?
【问题讨论】:
-
请记住,如果您只是在寻找具有当前时间的日期对象,您可以调用 new Date() 而不是使用日历。但是,您仍然需要按照 Mauricio 的建议设置默认时区。
-
您可能已经知道,但 EDT 和 EST 是有/没有 DST 的同一时区。 8 月通常是 EDT,因此实际上在美国没有 8 月的 EST。 en.wikipedia.org/wiki/Eastern_Time_Zone
-
是的,我认为这个问题可能与此有关,因为例如 -Duser.timezone=AET 有效。但是,我正在寻找解决此问题的永久方法,而不是解决方法。