Разные виды
String s = "2019-04-23 06:57:00";
String s = "2019-04-23";
Это два разных вида информации. Одна - это дата с временем суток, другая - просто дата. Таким образом, вы должны анализировать каждый объект как разные типы.
* +1012 *
LocalDateTime.parse
Для соответствия стандартному формату ISO 8601 , используемому по умолчанию в классе LocalDateTime
, замените ПРОБЕЛ в середине на T
. Я предлагаю вам обучить издателя ваших данных использованию только форматов ISO 8601 при обмене значениями времени и даты в виде текста.
LocalDateTime ldt1 = LocalDateTime.parse( "2019-04-23 06:57:00".replace( " " , "T" ) ) ;
Дробная секунда также разбирается по умолчанию.
LocalDateTime ldt2 = LocalDateTime.parse( "2019-04-23 06:57:00.0".replace( " " , "T" ) ) ;
См. Этот код, запущенный на IdeOne.com .
ldt1.toString (): 2019-04-23T06: 57
ldt2.toString (): 2019-04-23T06: 57
Ваш ввод только для даты уже соответствует ISO 8601 .
LocalDate ld = LocalDate.parse( "2019-04-23" ) ;
См. Этот код, запущенный на IdeOne.com .
ld.toString (): 2019-04-23
Дата с указанием времени суток
Вы можете убрать время суток с даты.
LocalDate ld = ldt.toLocalDate() ;
И вы можете добавить его обратно.
LocalTime lt = LocalTime.parse( "06:57:00" ) ;
LocalDateTime ldt = ld.with( lt ) ;
Момент
Однако, имейте в виду, что LocalDateTime
не не представляет момент, является не точкой на временной шкале. Без контекста часового пояса или смещения от UTC , LocalDateTime
не может удерживать мгновение, как объяснено в своем классе JavaDoc.
На мгновение используйте классы ZonedDateTime
, OffsetDateTime
или Instant
. Научите издателя ваших данных включать смещение, предпочтительно в UTC.
Избегайте устаревших классов даты и времени
Старые классы SimpleDateFormat
, Date
и Calendar
ужасны, изобилуют неудачным выбором дизайна, написанным людьми, неопытными в обработке даты и времени. Они были вытеснены несколько лет назад современными java.time классами, определенными в JSR 310 .