Как проверить, если одна дата за другой в Java?

1

Я принимаю две даты в качестве аргументов командной строки и хочу проверить, не первый ли после второй даты. формат даты "dd/MM/yyy". Пример: java dateCheck 01/01/2014 15/03/2014, также мне нужно будет проверить, была ли третья дата, запрограммированная в программе, до второй даты.

Теги:
date
command-line-arguments

5 ответов

2
try {
    System.out.println("Enter first date : (dd/MM/yyyy)");
    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date date1 = sdf.parse(bufferRead.readLine());
    System.out.println("Enter second date : (dd/MM/yyyy)");
    Date date2 = sdf.parse(bufferRead.readLine());
    System.out.println(date1 + "\n" + date2);
    if (date1.after(date2)) {
        System.out.println("Date1 is after Date2");
    } else {
            System.out.println("Date2 is after Date1");
    }
} catch (IOException e) {
    e.printStackTrace();
}
2

Чтобы сравнить две даты:

            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");

            Date firstDate = sdf.parse("01/01/2014");
            Date secondDate = sdf.parse("15/03/2014");

            if(firstDate.before(secondDate)){
                System.out.println("firstDate <  secondDate");
            }
            else if(firstDate.after(secondDate)){
                System.out.println("firstDate >  secondDate");
            }
            else if(firstDate.equals(secondDate)){
                System.out.println("firstDate = secondDate");
            }
0

ТЛ; др

LocalDate ld1 = LocalDate.parse( "01/01/2014" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ) ;
LocalDate ld2 = LocalDate.parse( "15/03/2014" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ) ;
LocalDate ld3 = LocalDate.of( 2014 , Month.JULY , 1 ) ;

Boolean isFirstDateBeforeSecondDate = ld1.isBefore( ld2 ) ;
Boolean isThirdDateBeforeSecondDate = ld3.isBefore( ld2 ) ;

Boolean result = ( isFirstDateBeforeSecondDate && isThirdDateBeforeSecondDate ) ;

return result ;

Использование java.time

В современном подходе используются классы java.time, а не хронические старые устаревшие классы времени (Date, Calendar и т.д.).

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

Определите шаблон форматирования, соответствующий вашим входным строкам, используя класс DateTimeFormatter.

String input = "15/03/2014" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( input , f );

ld.toString(): 2014-03-15

Чтобы указать фиксированную дату, укажите год, месяц и деньOfMonth. В течение месяца вы можете указать число, состоящее из 1-12 за январь-декабрь (в отличие от сумасшедшего 0-11 в унаследованных классах!). Или вы можете использовать объекты перечисления Month.

LocalDate firstOf2014 = LocalDate.of( 2014 , Month.JANUARY , 1 );

Сравните с использованием isBefore, isEqual или isAfter.

Boolean isInputDateBeforeFixedDate = ld.isBefore( firstOf2014 ) ;

isInputDateBeforeFixedDate.toString(): false

ISO 8601

Если возможно, замените свой формат строки даты на стандартный формат ISO 8601. Этот стандарт определяет множество полезных практических однозначных строковых форматов для значений даты и времени.

Классы java.time используют стандартные форматы по умолчанию при разборе/генерации строк. Вы можете увидеть примеры в приведенном выше коде. Для значения только для даты стандартным форматом является YYYY-MM-DD.


О java.time

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

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

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

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

  • Java SE 8, Java SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport.
  • Android

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

0

Используйте SimpleDateFormat для преобразования строки в Date.

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date1 = sdf.parse("01/01/2017");

Дата имеет до и после методов и может сравниваться друг с другом следующим образом:

if(todayDate.after(historyDate) && todayDate.before(futureDate)) {
    // In between
}

Для инклюзивного сравнения:

if(!historyDate.after(todayDate) && !futureDate.before(todayDate)) {
    /* historyDate <= todayDate <= futureDate */ 
}
  • 0
    (а) Ваш шаблон форматирования не соответствует вашим примерным данным. Три символа «у» вместо четырех и слеш вместо полной остановки. (b) К вашему сведению, старые проблемные классы даты и времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleTextFormat , теперь унаследованы и заменены классами java.time .
0

Чтобы прочитать дату и проверить до:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");
try {
    Date date1 = sdf.parse(string1);
    Date date2 = sdf.parse(string2);
    if(date1.before(date2)) {
       // do something
    }
} catch(ParseException e) {
    // the format of the read dates is not the expected one
}

Ещё вопросы

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