Строки объекта Java Date / Calendar, сравните - PullRequest
1 голос
/ 13 июня 2011

У меня есть объекты даты, отформатированные как

2011/06/13 17:52:20

и возвращаемые в виде строк.Как бы я сравнил это с другой датой, отформатированной таким же образом.Я хочу определить, какое из них больше, меньше или равно для условного оператора, который я формирую.

Без повторного изобретения колеса (или создания нескольких случаев), когда уже может быть основа для этого

Спасибо!

Ответы [ 5 ]

5 голосов
/ 13 июня 2011
  • используйте SimpleDateFormat для анализа
  • используйте compareTo(..) из Date полученных объектов

Например:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse(string1);
Date date2 = sdf.parse(string2);

int result = date1.compareTo(date2);

Результат (из документации java.util.Date):

значение 0, если аргумент Date равен этой дате;значение меньше 0, если эта Дата предшествует аргументу Дата;и значение больше 0, если эта Дата находится после аргумента Дата.

2 голосов
/ 13 июня 2011

На прошлой неделе мои коллеги указали мне, что строки yyyy-MM-dd HH: mm: ss полностью совместимы с упорядочением базовых дат (если поля заполнены нулями). Таким образом, вы можете просто сравнить значения String, если они более доступны.

2 голосов
/ 13 июня 2011

Мне кажется, ваш формат даты: гггг / мм / дд чч: мм: сс. Если это так, вы можете сравнить строки, и это даст вам точное больше / меньше / равно. Строка закодирована как наиболее значимая для наименее значимой.

0 голосов
/ 21 апреля 2017

tl; dr

LocalDateTime.parse( "2011/06/13 17:52:20".replace( " " , "T" ) )
             .isBefore( LocalDateTime.now() )

true

Подробности

Другие ответы верны в том, что вы можете (а) сравнивать по алфавитуэти конкретные строки или (b) сравниваются в хронологическом порядке после разбора на объекты даты и времени.

И помните, что форматы даты и времени не имеют «формата».Они содержат информацию о дате и времени.Они могут генерировать строку в определенном формате, но объект даты и времени является отдельным и отличным.

В других ответах используются старые классы даты и времени, которые вызывают проблемытеперь унаследованы, заменены классами java.time.

В ваших входах отсутствует информация о смещении от UTC и часовом поясе.Поэтому мы должны проанализировать их как LocalDateTime объектов.Для анализа замените пробел в середине символом T в соответствии со стандартом ISO 8601 для форматирования строк, представляющих значения даты и времени.

String input = "2011/06/13 17:52:20".replace( " " , "T" );
LocalDateTime ldtThen = LocalDateTime.parse( input ) ;
LocalDateTime ldtNow = LocalDateTime.now( ZoneId.of( "America/Montreal" ) ) ;

Сравните.

boolean ldtThenIsBefore = ldtThen.isBefore( ldtNow );
boolean ldtThenIsAfter = ldtThen.isAfter( ldtNow );
boolean ldtThenIsEqual = ldtThen.isEqual( ldtNow );

О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Где получить классы java.time?

Проект ThreeTen-Extra расширяет Java.время с дополнительными занятиями.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 13 июня 2011

Хотя SimpleDateFormat позволяет анализировать текст в объекте даты, гораздо лучше сохранить дату как объект Date и проанализировать ее на дисплее.

Создать / сохранить объекты Date и использовать их встроенныев методе CompareTo ().

...