in ch-commons-locale/src/main/java/com/cloudhopper/commons/locale/TimeZoneUtil.java [46:84]
static {
// build sorted list of timezones first
timezones = new TreeMap<String,TimeZone>();
// load all timezone ids in alphabetical order
Set tzs = DateTimeZone.getAvailableIDs();
long now = System.currentTimeMillis();
for (Object tz : tzs) {
String tzId = (String)tz;
// get the actual timezone...
DateTimeZone dtz = DateTimeZone.forID(tzId);
// get today's timezone standard offset
long standardOffset = dtz.getStandardOffset(now);
long standardOffsetPositive = (standardOffset < 0 ? standardOffset*-1 : standardOffset);
int hours = (int)(standardOffsetPositive/1000/60/60);
int mins = (int)((standardOffsetPositive-(hours*60*60*1000))/1000/60);
if (mins < 0) {
mins = 0;
}
// conver this into hours...
String standardOffsetTime = String.format((standardOffset < 0 ? "-" : "+") + "%02d:%02d", hours, mins);
//logger.debug("Adding " + tzId + ", " + standardOffsetTime);
timezones.put(tzId, new TimeZone(tzId, standardOffsetTime));
}
// build our "regional" list of timezones
// Africa, America, Antarctica, Arctic, Asia, Atlantic, Australia, Europe, Indian, Mideast, Pacific
continentalTimezones = new ArrayList<TimeZone>();
// always add UTC first
continentalTimezones.add(timezones.get("UTC"));
for (TimeZone tz : timezones.values()) {
String tempid = tz.getId().toLowerCase();
if (tempid.startsWith("africa") || tempid.startsWith("america") || tempid.startsWith("antarctica")
|| tempid.startsWith("arctic") || tempid.startsWith("asia") || tempid.startsWith("atlantic")
|| tempid.startsWith("australia") || tempid.startsWith("europe") || tempid.startsWith("indian")
|| tempid.startsWith("mideast") || tempid.startsWith("pacific")) {
continentalTimezones.add(tz);
}
}
}