2014-11-22 46 views
1

是否有一种使用Calendar类减去不同时间单位的便利方法? 我正在制作一个计时器,它可以在几小时,几分钟和几秒内倒计时多个小时并将时间打印到控制台。我不想在这个程序中使用任何库,如乔达时间。我也想使用Calendar类,而不是Date类,除非它太难了。如何使用日历减去不同的时间单位

这是我当前的代码,它只能打印在几秒钟内剩余时间:

import java.awt.*; 
import java.util.*; 

public class ClickWhen { 
    public static void main(String[] args) throws AWTException { 
     int minGoal = 30; 
     int hourGoal = 6+12; 
     Calendar time = Calendar.getInstance(); 
     int minute = time.get(Calendar.MINUTE); 
     int hour = time.get(Calendar.HOUR_OF_DAY); 
     int second = time.get(Calendar.SECOND); 
     int sRemaining = (minGoal*60+hourGoal*3600)-(second+minute*60+hour*3600); 
     boolean isGoing = true; 
     Robot r = new Robot(); 
     while(isGoing) { 
      r.delay(1000); 
      time = Calendar.getInstance(); 
      minute = time.get(Calendar.MINUTE); 
      hour = time.get(Calendar.HOUR_OF_DAY); 
      second = time.get(Calendar.SECOND); 
      if(hour >= hourGoal && minute >= minGoal) { 
       // do something 
       isGoing = false; 
      } 
      if(hour >= 12) { 
       System.out.println(hour-12+":"+minute+":"+second+" P.M."); 
      } 
      if(hour < 12) { 
       System.out.println(hour+":"+minute+":"+second+" A.M."); 
      } 
      sRemaining--; 
      System.out.println("Seconds Remaining: "+sRemaining); 
     } 
    } 
} 

这是我对堆栈溢出的第一个问题,让我怎么办?

回答

1

如果我理解你的问题,那么你可以传递一个负值的第二个参数Calendar.add(int field, int value)

int amount = -10; 
cal.add(Calendar.MILLISECOND, amount); 

减去从Calendar cal 10毫秒。

+0

谢谢!这应该工作。我可以澄清我想要的东西。我想要的是一种方法,如果我减去一秒钟以使它小于一秒钟,它将被设置为59并减去一分钟,所以它将像真正的时钟一样工作。我想要的是一种这样做的方法。 – 2014-11-24 14:33:01

+0

@captain尝试上面的代码(它已经)。好吧,一分钟是六十秒,但它确实像钟表一样工作。 – 2014-11-24 14:44:20