гггг-мм-дд ЧЧ: мм: сс: сборка из встроенных деталей
В дополнение к хорошему ответу Мено Хохшильда.
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
Несмотря на то, что он не встроен в том виде, в каком он есть (хотя он и происходит регулярно), я предпочитаю собирать его из двух предопределенных форматеров, упомянутых в этом другом ответе, а не писать собственную строку шаблона формата:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(' ')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.toFormatter();
ISO_LOCAL_TIME
принимает и печатает форматы, отличные от HH:mm:ss
. С одной стороны, он принимает формат без каких-либо секунд (HH:mm
), с другой стороны, секунды с долей до 9 десятичных знаков (например, HH:mm:ss.SSSSSSSSS
). Это часто преимущество; но если вы хотите выполнить строгую проверку проанализированной строки или хотите, чтобы строка выводилась в согласованном формате, это, конечно, недостаток.
Или использовать String.replace (char, char)
Другие будут форматировать и анализировать LocalDateTime
объекты в и из yyyy-MM-dd HH:mm:ss
формата без какого-либо явного средства форматирования, полагаясь на его сходство с форматом ISO 8601, также упомянутым Мено Хохшильдом.
String str = "2020-04-17 20:23:30";
LocalDateTime ldt = LocalDateTime.parse(str.replace(' ', 'T'));
System.out.println(ldt);
Вывод:
2020-04-17T20: 23: 30
И наоборот:
LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Tehran"));
String str = now.truncatedTo(ChronoUnit.SECONDS)
.toString()
.replace('T', ' ');
System.out.println(str);
2020-04-18 09: 35: 38