Как я могу сравнить время суток между объектами Date в Java 8? - PullRequest
0 голосов
/ 27 октября 2018

Учитывая два Date объекта, которые включают часы и минуты, как я могу элегантно определить, какой из них имеет самое раннее время дня?

например. если date1 равно 2018-01-01 при 09:00, а date2 равно 2018-01-02 при 08:00, то, согласно данной спецификации, date2 < date1.

Ответы [ 4 ]

0 голосов
/ 27 октября 2018

Вы можете попробовать сделать что-то вроде:

boolean compareTime(Date date1, Date date2) {
    DateFormat df = new SimpleDateFormat("HHmm");
    int timeDate1 = Integer.valueOf(df.format(date1));
    int timeDate2 = Integer.valueOf(df.format(date2));
    return timeDate1 >= timeDate2;
}
0 голосов
/ 27 октября 2018

Вы можете использовать compareTo -метод LocalTime, если вы конвертируете Date ранее.

Конвертировать так (можно найти на https://www.baeldung.com/java-date-to-localdate-and-localdatetime):

public static LocalTime convertToLocalTimeViaInstant(Date dateToConvert) {
    return dateToConvert.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalTime();
}

исравните так:

time1.compareTo(time2);

Если вы хотите использовать метод, вы можете использовать преобразование следующим образом:

public static int compareTimeOfDates(Date date1, Date date2) {
    return convertToLocalTimeViaInstant(date1).compareTo(convertToLocalTimeViaInstant(date2));
}
0 голосов
/ 27 октября 2018
int compareTimeOfDate(Date a, Date b) {
    LocalDateTime localA = a.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    int hourA = localA.getHour();
    int minuteA = localA.getMinute();

    LocalDateTime localB = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    int hourB = localB.getHour();
    int minuteB = localB.getMinute();

    if (hourA == hourB && minuteA == minuteB) {
        return 0;
    }

    if (hour1 < hour2 || hour1 == hour2 && minute1 < minute2) {
        return -1;
    }

    return 1;
}
0 голосов
/ 27 октября 2018

Редактировать 2:

//just a sample. base on your case, set the date you have to here.
        Date date1 = Calendar.getInstance().getTime(); 
        Date date2 = Calendar.getInstance().getTime();

        LocalDateTime lcdate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        LocalDateTime lcdate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();


        int date1Hour = lcdate1.getHour();
        int date1Minute = lcdate1.getMinute();

        int date2Hour = lcdate2.getHour();
        int date2Minute = lcdate2.getMinute();

Более подробно здесь: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

Надеюсь, эта помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...