package bigjava; import java.text.DateFormat; import java.util.Date; import java.util.TimeZone; /** This bean formats the local time of day for a given date and city. */ public class TimeZoneBean { /** Initializes the formatter. */ public TimeZoneBean() { timeFormatter = DateFormat.getTimeInstance(); } /** Setter for city property. @param aCity the city for which to report the local time */ public void setCity(String aCity) { city = aCity; zone = getTimeZone(city); } /** Getter for city property. @return the city for which to report the local time */ public String getCity() { return city; } /** Read-only time property. @return the formatted time */ public String getTime() { if (zone == null) return "not available"; timeFormatter.setTimeZone(zone); Date time = new Date(); String timeString = timeFormatter.format(time); return timeString; } /** Looks up the time zone for a city. @param aCity the city for which to find the time zone @return the time zone or null if no match is found */ private static TimeZone getTimeZone(String aCity) { String[] ids = TimeZone.getAvailableIDs(); for (int i = 0; i < ids.length; i++) if (timeZoneIDmatch(ids[i], aCity)) return TimeZone.getTimeZone(ids[i]); return null; } /** Checks whether a time zone ID matches a city. @param id the time zone ID (e.g. "America/Los_Angeles") @param aCity the city to match (e.g. "Los Angeles") @return true if the ID and city match */ private static boolean timeZoneIDmatch(String id, String aCity) { String idCity = id.substring(id.indexOf('/') + 1); return idCity.replace('_', ' ').equals(aCity); } private DateFormat timeFormatter; private String city; private TimeZone zone; }