On 24/08/2013 7:09 AM, Omair Majid wrote:
Hi,
The algorithm that OpenJDK uses to guess the local timezone ID on Linux
goes like this:
1. If TZ environment variable is set, use that
2. If /etc/timezone is readable, read the time zone from there
3. If /etc/localtime is a symlink, resolve that, and use the name to
guess the time zone.
4. Scan /usr/share/zoneinfo for a file whose contents match the contents
of /etc/localtime.
Step 4 (if it is ever reached) is probably going to lead to incorrect
results since there are a number of timezones that have the same
zoneinfo data (such as Europe/London and Europe/Belfast). So it seems
sensible to me to try and use additional sources to guess the timezone
ID before resorting to file content comparisons.
The webrev adds a step between 2 and 3 that reads and parses
/etc/sysconfig/clock to extract the timezone:
http://cr.openjdk.java.net/~omajid/webrevs/timezone-read-sysconfig-clock/00/
This file exists on some Red Hat Enterprise Linux (and derivative)
distributions and contains contents that look this:
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Europe/Zurich"
Surely the implication here is that if this file exists and has this
data then /etc/localtime should be correctly configured - hence we
should use that. ie at best this should come after step 3 not before it.
But even then when someone writes "do not rely on its
contents elsewhere" I'm inclined to do what they suggest!
David
With this, we should be able to identify the exact timezone ID.
Thanks,
Omair