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)));
   }
}