Есть ли все равно, чтобы подтвердить, является ли заданная дата (yyyy-MM-dd) действительной датой? Он тоже должен справиться с високосным годом. например (2015-02-29), должны быть недействительными. Я получаю дату в виде строки и помещаю ее в объект joda DateTime.Java date validation joda time
ответ
Это должно работать для вас, я думаю, что (если вы хотите сохранить его простым).
Вы должны сделать setLenient(false)
на SimpleDateFormat
.
public static boolean validateDate(String dateString){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
try {
sdf.parse(dateString);
return true;
} catch (ParseException ex) {
return false;
}
}
FYI, неприятные старые классы времени, такие как ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html), [ 'java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) и' java.text.SimpleDateFormat' теперь [наследие] (https://en.wikipedia.org/wiki/Legacy_system), вытесненный [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary. html), встроенные в Java 8 и Java 9. См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –
Использование SimpleDateFormat
public boolean valiDate(String dateString){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
try {
Date date = sdf.parse(dateString);
return true;
} catch (ParseException ex) {
return false;
}
}
Вам не хватало 'setLenient (false)' в оригинальный ответ. Во всяком случае, +1 от меня. –
FYI, неприятные старые классы времени, такие как ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html), [ 'java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) и' java.text.SimpleDateFormat' теперь [наследие] (https://en.wikipedia.org/wiki/Legacy_system), вытесненный [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary. html), встроенные в Java 8 и Java 9. См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –
Предыдущие ответы должны быть в порядке, но, учитывая, что ОП специально попросили Joda-Time версии, эта альтернатива будет также работать:
@Test
public void test() {
String testDateOk = "2015-02-25"; // Normal date, no leap year
String testDateOk2 = "2016-02-29"; // Edge-case for leap year
String testDateWrong = "2017-02-29"; // Wrong date in a non-leap year
String testDateInvalid = "2016-14-29"; // plain wrong date
assertTrue(isValidDate(testDateOk));
assertTrue(isValidDate(testDateOk2));
assertFalse(isValidDate(testDateWrong));
assertFalse(isValidDate(testDateInvalid));
}
boolean isValidDate(String dateToValidate){
String pattern = "yyyy-MM-dd";
try {
DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
fmt.parseDateTime(dateToValidate);
} catch (Exception e) {
return false;
}
return true;
}
Лучше поймать 'IllegalArgumentException', а не любое старое исключение. – jhericks
FYI, проект [Joda-Time] (http://www.joda.org/joda-time/) теперь находится в [режиме обслуживания] (https://en.wikipedia.org/wiki/Maintenance_mode), с команда, предлагающая перейти на классы [java.time] (http://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html). См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –
ТЛ; дг
try { … java.time.LocalDate.parse(input) … }
catch (java.time.format.DateTimeParseException e) { … }
java.time
Joda-Time проект в настоящее время находится в maintenance mode, и команда советует перейти на классы java.time.
Класс LocalDate
представляет собой значение, не имеющее времени суток и без часового пояса.
LocalDate ld = LocalDate.parse("2015-02-29") ;
Для обнаружения недействительных входов, ловушек для DateTimeParseException
.
String input = "2015-02-29";
try
{
LocalDate ld = LocalDate.parse(input);
System.out.println("ld.toString(): " + ld) ;
} catch (DateTimeParseException e)
{
// … handle exception
System.out.println(e.getLocalizedMessage());
}
Текст '2015-02-29' не может быть разобран: Invalid дата '29 февраля', как '2015' не является високосным
О java.time
Рамка java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: 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
- ThreeTenABP Проект адаптирует ThreeTen-Backport (как упоминалось выше) для Android специально.
- См. How to use ThreeTenABP….
ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
- 1. Java Date duration validation
- 2. joda time hibernate to DB2 DATE
- 3. Joda-Time Formatting for Islamic Date
- 4. Java Joda time Летнее время
- 5. Joda-Time compareTo NoSuchMethod
- 6. Joda Time IllegalArgumentException
- 7. Использование календарей или Joda-Time в java
- 8. Как преобразовать hijri в gregorian date by joda time
- 9. Joda Time - непоследовательный результат
- 10. Joda Date-Time: Capture Date time (UTC) и преобразование в байтовый/байтовый массив
- 11. Неделя между двумя датами Java + Joda Time
- 12. Joda Time PeriodFormatterBuilder
- 13. Joda Time сбивает мое приложение
- 14. NoClassDefFoundError Exception android joda time
- 15. java date time compare two
- 16. Jackson JSON Генератор схемы для Joda date time
- 17. конвертировать миллисекунду в Joda Date Time или для зоны 0000
- 18. Java Joda Time - использование итератора диапазона дат
- 19. Преобразование Time-String с использованием joda-time
- 20. мигрировать из библиотеки времени Joda в Java time (Java 8)
- 21. Как установить свойство Time в Java с использованием Joda-Time
- 22. Интервал Joda Time
- 23. Печать Joda-Time Interval
- 24. Programmatic Joda Time formatter
- 25. Parse joda-time
- 26. Joda-Time: Дата расчет
- 27. Joda-Time, Время без даты
- 28. Scala Joda Time Format искаженной
- 29. Joda Date conversionstion
- 30. Как использовать утилиты date-time в libGdx?
смотрите http://stackoverflow.com/questions/226910/how-to-sanity-check-a-date-in-java, а точнее @tardate response – mdm
используете ли вы java 8? – Satya
@Satya Я использую java 7 – root