
/** An instance represents the time of day in a time zone, in
    terms of hours, minutes, and seconds. The implemented time zones are:<br><br>
    
     GMT: Greenwich Mean Time, GMT<br>
     BST: British Summer Time, GMT+1<br>
     EST: Eastern Standard Time, GMT-5 hours (NY)<br>
     EDT: Eastern Daylight Savings Time, GMT-4 hours (NY)<br>
     CST: Central Standard Time, GMT-6 hours (Chicago)<br>
     CDT: Central Daylight Savings Time, GMT-5 hours (Chicago)<br>
     MST: Mountain Standard Time, GMT-7 hours (Phoenix)<br>
     MDT: Mountain Daylight Savings Time, GMT-6 (Phoenix)<br>
     PST: Pacific Standard Time, GMT-8 hours (LA)<br>
     PDT: Pacific Daylight Saving Time, GMT-7 hours (LA)<br>
     IND: India time, GMT+5:30 hours (New Delhi)<br><br>
     
     India (IND) is included only to show that times are not always on
     hourly boundaries from GMT.<br><br>
     
     A time may appear negative or greater than 24 hours.
     This is because we allow a conversion of a time from one time zone to another,
     and a time of 0 hours GMT is -7 hours PDT (for example), while a time of
     23:59 GMT is 29:29 IND.<br><br>
     
     An instance of the class can show the time using a 24-hour clock
     or using the AM-PM designation; it is the user's choice.
 */
public class Time100 {
    public static final String GMT= "GMT";
    public static final String BST= "BST";
    public static final String EST= "EST";
    public static final String EDT= "EDT";
    public static final String CST= "CST";
    public static final String CDT= "CDT";
    public static final String MST= "MST";
    public static final String MDT= "MDT";
    public static final String PST= "PST";
    public static final String PDT= "PDT";
    public static final String IND= "IND";
    
    /** Class invariant: Variable tim is a time in seconds on a day in
        time zone zone. The time may be negative or greater than 24 hours, as indicated
        in the class specification (which says why). Field display12Hr has the meaning
        "the time should be viewed as a 12-hour clock".
     */
    private int tim= 0;
    private String zon= "GMT";
    private boolean display12Hr= false; 
    
    
    /** Constructor: an instance with time 0 in GMT and a 24-hour clock.
        Note that this constructor is complete.*/
    public Time100() {
    }
    
    /** Constructor: A time of day of s seconds in zone z.
     Value s should be greater than -24 hours and less than +48 hours;
     if not, the time 0 is used.
     If z is not a legal zone, make it GMT. 
     The time should be displayed as am-pm iff b is true */
    public Time100(int s, String z, boolean b) {
        if (isLegal(z)) {
            zon= z;
        }
        tim= s;
        if (s <= -24*60*60  ||  48*60*60 <= s) {
            tim= 0;
        }
        display12Hr= b;
    }
    
    /** Constructor: A time of day of h hours, m minutes, and s seconds
     in zone z.
     The time should be greater than -24 hours and less than +48 hours;
     if not, the time 0 is used. If z is not a legal zone, make it GMT. 
     The time should be displayed as am-pm iff b is true */
    public Time100(int h, int m, int s, String z, boolean b) {

    }
    
    /** = the time, in seconds. */
    public int getTime() {
        return 0;
    }
    
    /** = the time zone. */
    public String getZone() {
        return "";
    }
    
    /** = the am-pm indication. --true means display in AM-PM format;
                                false means display in 24-hour format. */
    public boolean getAmPm() {
        return false;
    }
    
    /** If b is true, set the display mode to AM-PM;
        if b is false, set it to "twenty-four hours". */
    public void setDisplay(boolean b) {
        
    }
    
    /** = "z is a legal zone" --see class specification. */
    private static boolean isLegal(String z) {
        return true;   
    }
    
    /** = a string representation of the time. This is basically in the
     form "hours:minutes:seconds zone", but it differs depending on
     whether a 12- or 24-hour clock is wanted. 
     We describe the difference with examples:<br><br>
     
       In AM-PM mode,  output could be: 06:20:05AM DST  or  06:20:05PM DST<br>
       In 24-hour mode output could be: 06:20:05 DST    or  18:20:05 DST<br><br>
       
     If the time is negative or at least 24 hours, print it using the 24-hour
     mode, even if 12-hour mode is indicated.<br><br>
     
     The string representation MUST follow the rules gives in the notes at the
     end of the handout for assignment A3, Fall 2005, CS100J.
     */
    public String toString() {
        int sec;   // Field s contains the time in seconds. Local
        int min;   // variables hr, min, and sec will contain the corres-
        int hr;    // ponding time broken into hours, minutes and seconds.
        String result= ""; // The string to be returned
        boolean amPM; // = "give description in AM-PM format"
        
        // Assign proper values to sec, min, and hr
        
        
        // Save the am-pm indication in local variable amPm. Then, if the
        // time is negative or >= 24, set amPm to false so that a
        // 24-hour clock. will be printed.
        
        // Append either a blank or '-' to result, depending on whether
        // the time is positive or negative.
        
        
        // Append the hour to result --make sure the hour is two digits long
        // (what the hour is may depend on whether a 12-hour or 24-hour clock
        // is being displayed)
        
        
        // Append the minutes to result
        
        
        // Append the seconds to result
        
        
        // Append the am-pm designation if necessary --use local variable amPm
        // to tell whether am-pm is to be used.
        
        
        return result + " " + zon;   
    }
    
    /** =  a new Time that is the same as this time but described in GMT */
    public Time100 timeInGMT() {
        Time100 t= new Time100(tim, GMT, display12Hr);
        if (zon.equals(BST)) t.tim= tim - 1*3600;
        if (zon.equals(EST)) t.tim= tim + 5*3600;
        if (zon.equals(EDT)) t.tim= tim + 4*3600;
        if (zon.equals(CST)) t.tim= tim + 6*3600;
        if (zon.equals(CDT)) t.tim= tim + 5*3600;
        if (zon.equals(MST)) t.tim= tim + 7*3600;
        if (zon.equals(MDT)) t.tim= tim + 6*3600;
        if (zon.equals(PST)) t.tim= tim + 8*3600;
        if (zon.equals(PDT)) t.tim= tim + 7*3600;
        if (zon.equals(IND)) t.tim= tim - 5*3600 - 3600/2;
        
        return t;
    }
    
    /** =  a new Time that is the same as this time but described in 
     zone z. If z is not a legal zone, the new zone is taken to be GMT */
    public Time100 timeInZone(String z) {
        return null;
    }
    
    /** = -1 if this time < time t,
           0 if this time equals time t, and
           1 if this time > time t */
    public int compareTo(Time100 t) {
        return 0; 
    }
    
}