Java representing time class

I want to represent time with my time class. I can't use get and set methods.Only I can use listed methods on the code.But it doesn't work. It returns 0:0:0.

 public int addHours(int hours)
      {
          if(hours>=0&&hours<=23)
          {      
          return hours;
          }
          return 0;
      }
      public int addMinutes(int minutes)
      {
          if(minutes>=0&&minutes<=59)
          {
              return minutes;
          }
        return 0;  
      }
      public int addSeconds(int seconds)
      {
          if(seconds>=0&&seconds<=59)
          {
              return seconds;
          }
      return 0;
      }
      public String showTime()
      {
        return hours+":"+minutes+":"+seconds;
      }
}

Upvotes: 0

Views: 141

Answers (2)

kritzikratzi
kritzikratzi

Reputation: 20221

your code does nothing.

you need to do something like this:

public void addHours( int hours ){
   this.hours += hours; // add hours
   this.hours %= 24; // roll over at 24 hours
}

public void addMinutes( int minutes ){
    this.minutes += minutes; // add minutes
    addHours(this.minutes/60); // carry over to hours
    this.minutes %= 60; // roll over at 60 minutes
}

public void addSeconds( int seconds ){
    this.seconds += seconds; // add seconds
    addMinutes(seconds/60); // carry over to minutes
    this.seconds %= 60; // roll over at 60 seconds
}

(it probably won't matter, but this is not thread safe at all)

but this is generally a bad idea. Java 8 has a beautiful time api, pre Java-8 there is the JodaTime library (which is actually the basis of the Java 8 time api). It seems what you want to do could benefit from LocalTime:

LocalTime t = LocalTime.of(13,50,27).addHours(1).addMinutes(1).addSeconds(1); 
System.out.println(t.toString()); 

// prints 14:51:28

Upvotes: 2

fiddler57
fiddler57

Reputation: 11

Use java.util.Calendar and java.text.SimpleDateFormat:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 0);
cal.add(Calendar.HOUR, 5);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
System.out.println(sdf.format(cal.getTime()));

Upvotes: 0

Related Questions