package org.jboss.seam.international; import java.util.Date; import java.util.TimeZone; /** * A wrapper around a TimeZone that provides a more convenience interface to * access the time zone information in the UI, in particular in the options of * a select menu. * * @author Dan Allen */ public class TimeZoneWrapper extends TimeZone { private static final int MILLISECONDS_PER_HOUR = 1000 * 60 * 60; private TimeZone timeZone; public TimeZoneWrapper(TimeZone tz) { timeZone = tz; setID(tz.getID()); } @Override public void setID(String id) { super.setID(id); timeZone = TimeZone.getTimeZone(id); } public String getId() { return timeZone.getID(); } public String getLabel() { StringBuilder label = new StringBuilder(50); label.append(getId().replace("_", " ")); label.append(" (UTC"); label.append(timeZone.getRawOffset() > 0 ? "+" : "-"); if (Math.abs(timeZone.getRawOffset()) < MILLISECONDS_PER_HOUR * 10) { label.append("0"); } label.append(Math.abs(timeZone.getRawOffset())/MILLISECONDS_PER_HOUR); label.append(":00)"); return label.toString(); } public TimeZone getTimeZone() { return timeZone; } @Override public int getOffset(int era, int year, int month, int day, int dayOfWeek, int millis) { return timeZone.getOffset(era, year, month, day, dayOfWeek, millis); } @Override public void setRawOffset(int offset) { timeZone.setRawOffset(offset); } @Override public int getRawOffset() { return timeZone.getRawOffset(); } @Override public boolean useDaylightTime() { return timeZone.useDaylightTime(); } @Override public boolean inDaylightTime(Date date) { return timeZone.inDaylightTime(date); } @Override public Object clone() { return timeZone.clone(); } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final TimeZoneWrapper other = (TimeZoneWrapper) obj; if (timeZone != other.timeZone && (timeZone == null || !timeZone.equals(other.timeZone))) { return false; } return true; } @Override public int hashCode() { int hash = 7; hash = 79 * hash + (timeZone != null ? timeZone.hashCode() : 0); return hash; } }