public final class SimpleTime4 { int hour, minute; SimpleTime4 (final int h) { this(h,0); } SimpleTime4 (final int h, final int m) { this.hour=h; this.minute=m; } // Copy contructor (useful for mutable objects) SimpleTime4 (final SimpleTime4 t) { this (t.hour, t.minute); } @java.lang.Override public String toString () { if (hour==0 && minute==0) { return ("midnight"); } else if (hour==12 && minute==0) { return ("noon"); } else { return String.format ("%02d:%02d", hour, minute); } } // Danger! Mutating method public void advanceMinutes (final int m) { int totalMinutes = (60*hour + minute + m) % (24*60); if (totalMinutes<0) totalMinutes += 24*60; hour = totalMinutes/60; minute = totalMinutes%60; } public boolean before (final SimpleTime4 t) { return ((this.hour < t.hour) || ((this.hour == t.hour) && (this.minute < t.minute))); } public static void main (final String[] args) { final SimpleTime4 t = new SimpleTime4 (9,30); t.advanceMinutes(45); System.out.println (t); System.out.println (t.before (new SimpleTime4 (12))); } }