Как вычитать разные единицы времени, используя Календарь [дубликаты]

1

Есть ли удобный способ вычитания разных единиц времени с помощью класса 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);
        }
    }
}

Это мой первый вопрос о переполнении стека, так как я это сделал?

Теги:
timer
time
calendar
subtraction

1 ответ

1
Лучший ответ

Если я понимаю ваш вопрос, тогда вы можете передать отрицательное значение в качестве второго аргумента в Calendar.add(int field, int value) например

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

вычесть 10 миллисекунд из Calendar cal.

  • 0
    Спасибо! Это должно работать. Я могу уточнить, что я хотел, я думаю. Мне нужен был способ, если бы вычесть секунду, чтобы она была меньше единицы, вместо этого она была бы установлена на 59 и вычитала минуту, чтобы она работала как настоящие часы. То, что я хотел, было методом, который сделал это.
  • 0
    @captain попробуйте приведенный выше код (он уже это делает). Ну, минута шестьдесят секунд, но она работает как часы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню