Есть ли удобный способ вычитания разных единиц времени с помощью класса Calendar? Я делаю таймер, который отсчитывает несколько часов и печатает время на консоль в часах, минутах и секундах. Я не хочу использовать в этой программе такие библиотеки, как Joda Time. Я также хочу использовать класс 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);
}
}
}
Это мой первый вопрос о переполнении стека, так как я это сделал?
Если я понимаю ваш вопрос, тогда вы можете передать отрицательное значение в качестве второго аргумента в Calendar.add(int field, int value)
например
int amount = -10;
cal.add(Calendar.MILLISECOND, amount);
вычесть 10 миллисекунд из Calendar cal
.