Добавляя два раза, один является строкой, а другой - датой ЧЧ: мм в Java.

1

пример кода для добавления:

    String time1="0:01:30";
    String time2="0:01:35";//For temp Only
    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
    Date date1 = timeFormat.parse(time1);
    Date date2 = new Date();//timeFormat.parse(time2);
    String s = timeFormat.format(date2);
    Date date4 = timeFormat.parse(s);
    long sum = date1.getTime() + date4.getTime();
    String date3 = timeFormat.format(new Date(sum));
    System.out.println("The sum is "+date3);// output not getting correctly 

образец Код для подписи:

    calculationBetween2Dates(Date bigTime, Date smallTime){
    SimpleDateFormat st1 = new SimpleDateFormat("HH:mm");
    long diff = bigTime.getTime() - smallTime.getTime();
    long diffMinutes = diff / (60 * 1000);
    long diffHours = diff / (60 * 60 * 1000);
    long onlyMinits = diffMinutes - (diffHours * 60);
    String var = String.valueOf(diffHours + ":" + onlyMinits);
    Date warkedDate = st1.parse(var);
    return warkedDate;
     }// it worked For me for sub between 2 timings 

Выполнение добавления не было возможным; что не так в моем добавлении кода?

  • 0
    long sum = bigTime.getTime () + smallTime.getTime (); Строка date3 = st1.format (новая дата (сумма));
  • 0
    Какой (неправильный) вывод вы видите и чего ожидали? Не очень помогает просто сказать «это неправильно» или «это не сработало» ...
Показать ещё 2 комментария
Теги:
datetime
simpledateformat

1 ответ

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

Объекты Java Date - это обертки вокруг определенного момента времени. Это реализовано как "число миллисекунд за эпоху [1 января 1970]". И, согласно Javadocs, метод getTime() возвращает это количество миллисекунд.

Итак, когда вы анализируете свое время на Date, вы не получаете объект, который представляет "1:30 утра". Вы получаете объект, который представляет "1:30 утра сегодня". И поэтому getTime() вернет некоторое число, которое составляет около 45 лет в миллисекундах.

Если вы добавите два из этих выходов вместе, вы получите число, которое составляет около 90 лет в миллисекундах, и поэтому, если вы вернете его обратно в Date вы получите мгновение, представляющее некоторый момент в конце 2059 года. То есть... действительно не то, что вы хотите.

(Обратите внимание, что это своего рода работа для случая вычитания, потому что вы получаете два очень больших числа, которые, тем не менее, составляют всего полчаса. Когда вы их вычитаете, вы остаетесь с датой, которая представляет собой немного после полуночи 1 января 1970 года Тем не менее - это может не работать в некоторых случаях с краями, в зависимости от таких вещей, как переход на летнее время, потому что вы все еще ссылаетесь на реальные моменты в истории - поэтому я не буду на это полагаться).


Лучший способ сделать это - использовать объект, который представляет собой просто время суток. Java 8 имеет представление LocalTime, и вы можете легко добавить два из них, объединив результат вызова toSecondOfDay.

Редактирование: если вы застряли с использованием более ранней версии Java... Стандартный ответ для любых вопросов, связанных с датой и временем, использовался для "использования Joda-Time " (это то, на чем основывались классы Java 8). Если сторонние библиотеки по какой-либо причине не являются опцией, то вам, вероятно, придется реализовать свой собственный класс для представления и добавления времени (это не так уж и важно - всего три поля int и некоторая логика, чтобы "нести одну", когда последние два достигли 60).

  • 0
    спасибо хорошее объяснение ... есть ли другие шансы для Java 1.6.0_45
  • 0
    @kks Согласно моей редакции, я бы использовал Joda (и их класс DateTime ).

Ещё вопросы

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