代表时间等级的Java

时间:2016-02-27 14:32:49

标签: java

我想用时间表来表示时间。我不能使用get和set方法。只能在代码上使用列出的方法。但它不起作用。 它返回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;
      }
}

2 个答案:

答案 0 :(得分:2)

你的代码什么都不做。

你需要做这样的事情:

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
}

(可能没关系,但这根本不是线程安全的)

但这通常是一个坏主意。 Java 8有一个美丽的时间api,在Java-8之前还有JodaTime库(它实际上是Java 8时间api的基础)。看起来你想做的事可以从LocalTime中受益:

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

// prints 14:51:28

答案 1 :(得分:0)

使用java.util.Calendar和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()));