дата и время Java сравнить два - PullRequest
3 голосов
/ 28 ноября 2010

Какой будет лучший способ сравнить две даты в Java?

Прямо сейчас у меня есть массив времени, как

10,00, 12,00, 2,00, 4,00

Как мы можем узнать, какое время подойдет в следующий раз по сравнению с нашим компьютерным временем?

Скажем, сейчас у меня время на компьютере 3,15, что мне делать, чтобы показывать 4,00?

Date date = new Date();

Ответы [ 4 ]

12 голосов
/ 28 ноября 2010

java.util.Date реализует интерфейс Comparable.Это означает, что вы можете очень легко сравнить два объекта даты с кодом, подобным этому:

if (date1.compareTo(date2) < 0)
{
        System.out.println("date1 is before date2");
}
else if (date1.compareTo(date2) > 0)
{
    System.out.println("date1 is after date2");
}
else
{
    System.out.println("date1 is equal to date2");
}
5 голосов
/ 28 ноября 2010

Я бы использовал Joda Time .Создайте LocalTime для каждого интересующего вас времени и просто new LocalTime(), чтобы узнать текущее время дня ... тогда вы можете сравнить их с compareTo или isBefore и isAfter.

Использование Joda Time вместо встроенных классов Date / Calendar даст вам гораздо более читаемый код для такого рода вещей.

0 голосов
/ 20 июня 2016

Класс java.util.Date - это неправильный тип для ваших нужд.Этот класс представляет дату плюс время суток, а вам нужно только время суток.Среди старых классов даты-времени, связанных с ранними версиями Java, есть класс , а не , который действительно представляет значение времени дня.Класс java.sql.Time претендует на это, но это хак.

java.time

Фреймворк java.time встроен в Java8 и позже.См. Oracle Tutorial .Эти классы были вдохновлены очень успешной библиотекой Joda-Time .Большая часть функциональности java.time перенесена на Jave 6 и 7 , а далее адаптирована для Android .Эти классы вытесняют старые классы даты и времени; обширное улучшение.

Класс LocalTime представляет время суток без даты и без часового пояса.

Использованиеотсортированная коллекция, такая как List для упорядочивания ваших значений.

List<LocalTime> times = new ArrayList<>( 4 );
times.add( LocalTime.of( 10 , 0 );
times.add( LocalTime.of( 12 , 0 );
times.add( LocalTime.of( 14 , 0 );
times.add( LocalTime.of( 16 , 0 );

Определите время выборки для сравнения.

LocalTime sample = LocalTime.of( 15 , 15 ); // Quarter-hour past 3 in the afternoon.

Или получите текущее время-дня. Укажите часовой пояс , поскольку он более надежен, чем неявный, в зависимости от текущего часового пояса вашей JVM .

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime sample = LocalTime.now( zoneId );

Выполните цикл List, чтобы найтипункт, который позже в день, чем ваше время выборки.Для сравнения используйте методы isAfter, isBefore или equals.

LocalTime hit = null;
for ( LocalTime time : times ) {
    if ( time.isAfter( sample ) ) {
        hit = time;
        break; // Bail-out of this FOR loop.
    }
}
// Test if 'hit' is still null, meaning no appropriate value found.
if ( null == hit ) { … } else ( … }
0 голосов
/ 28 ноября 2010

JodaTime, кажется, является стандартным ответом на подобные вопросы, но у меня еще не было времени (без каламбура), чтобы проверить Joda, поэтому вот мое предложение в Календаре:

public static String getNextHour() {
    Calendar c = new GregorianCalendar();
    int minsLeft = 60 - c.get(Calendar.MINUTE);
    c.add(Calendar.MINUTE, minsLeft);

    SimpleDateFormat sdf = new SimpleDateFormat("h:mm");
    return sdf.format(c.getTime());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...