Java Time Zone is messed up
On Ubuntu, it's not enough to just change the /etc/localtime file. It seems to read /etc/timezone file, too. It's better follow the instruction to set the time zone properly. In particular, do the following:
$ sudo cp /etc/timezone /etc/timezone.dist
$ echo "Australia/Adelaide" | sudo tee /etc/timezone
Australia/Adelaide
$ sudo dpkg-reconfigure --frontend noninteractive tzdata
Current default time zone: 'Australia/Adelaide'
Local time is now: Sat May 8 21:19:24 CST 2010.
Universal Time is now: Sat May 8 11:49:24 UTC 2010.
On my Ubuntu, if /etc/localtime and /etc/timezone are inconsistent, Java seems to read default time zone from /etc/timezone .
I had a similar issue, possibly the same one. However my tomcat server runs on a windows box so the symlink solution will not work.
I set -Duser.timezone=Australia/Sydney
in the JAVA_OPTS
however tomcat would not recognize that DST was in effect. As a workaround I changed Australia/Sydney
(GMT+10:00) to Pacific/Numea
(GMT+11:00) so that times would correctly display however I would love to know the actual solution or bug, if any.
It's a "quirk" in the way the JVM looks up the zoneinfo file. See Bug ID 6456628.
The easiest workaround is to make /etc/localtime a symlink to the correct zoneinfo file. For Pacific time, the following commands should work:
# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
I haven't had any problems with the symlink approach.
Edit: Added "sudo" to the commands.