Arhn - архитектура программирования

ошибка в получении правильных часов и минут

public class Testdate_time {

public void testdate() throws ParseException {

    String in_time = "2018 May 07 09:20:01 AM";
    String out_time = "2018 May 07 10:08:29 AM";
    int hours = 0;
    int mintues = 0;
    org.joda.time.format.DateTimeFormatter format = DateTimeFormat.forPattern("yyyy MMM dd hh:mm:ss a");
    DateTime date1 = format.parseDateTime(in_time);
    DateTime date2 = format.parseDateTime(out_time);
    hours = Hours.hoursBetween(date1, date2).getHours();

    String strhours = String.valueOf(hours).replaceAll("-", "");
    mintues = date1.getMinuteOfHour() - date2.getMinuteOfHour();
    String Strminutes = String.valueOf(mintues).replaceAll("-", "");
    System.out.println("hours" + strhours);
    System.out.println("minutes" + Strminutes);

}

public static void main(String[] args) throws ParseException {

    new Testdate_time().testdate();

}

я также использовал jodatime и simpledateformat http://www.joda.org/joda-time/userguide.html

Вывод:

hours0
minutes12
08.05.2018

  • Так как вы получаете минуты отдельно, ваш вывод минут равен 20 - 8, следовательно, 12. 08.05.2018
  • #но почему бы не считать часы() 08.05.2018
  • Между 09:20 и 10:08 меньше 1 часа, поэтому hoursBetween() возвращает 0. Между 08 и 20 12 минут, поэтому minutes = 12. Что сложного в том, чтобы понять это? 08.05.2018
  • Потому что между вашими свиданиями нет и часа. 08.05.2018
  • @notyou hours = Hours.hoursBetween(date1, date2).getHours() и не рассчитывается в часах 08.05.2018
  • @VivekSrivastava Он вычисляет часы между ними, и меньше 1 равно 0. 08.05.2018
  • Перечитайте мой комментарий выше, а также @Andreas' 08.05.2018
  • Кстати: Вы говорите не то, что ожидали. Вы должны ожидать хорошего вычисления, чтобы сказать 0 hours 48 minutes, но для этого вы должны вычислить diff = minutesBetween(), не отбрасывая знак, и вычислить hours = diff / 60 и minutes = diff % 60. 08.05.2018
  • Я проголосовал против, потому что вы не указываете ожидаемый результат и не проявляете никаких усилий по поиску и исследованию (я полагаю, что вы должны были найти ряд похожих вопросов и ответов с умеренными усилиями). 08.05.2018

Ответы:


1

Чтобы правильно рассчитать часы и минуты между двумя датами, используя API времени Java 8 и игнорируя летнее время, вы должны сделать это следующим образом:

String in_time = "2018 May 07 09:20:01 AM";
String out_time = "2018 May 07 10:08:29 AM";
DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu MMM dd hh:mm:ss a", Locale.US);
LocalDateTime date1 = LocalDateTime.parse(in_time, format);
LocalDateTime date2 = LocalDateTime.parse(out_time, format);

long diff = ChronoUnit.MINUTES.between(date1, date2);
System.out.printf("%d hours %d minutes%n", diff / 60, diff % 60);

Или, если вы не хотите заниматься математикой самостоятельно, используйте Duration:

Duration duration = Duration.between(date1, date2);
System.out.printf("%d hours %d minutes%n", duration.toHours(), duration.toMinutesPart());

Вывод (от обоих)

0 hours 48 minutes
08.05.2018
  • Может быть, я просто ненавижу любую арифметику, применяемую к значениям даты/времени, но вы могли бы сделать что-то большее подобно этому, который полностью зависит от API 08.05.2018
  • @MadProgrammer также добавил решение Duration. 08.05.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..