Формат ZonedDateTime

Мне нужно отформатировать время ZonedDate для форматирования MM/dd/yyyy,

ZonedDateTime zonedDateTime = ZonedDateTime.now();
String date = DateTimeFormatter.ofPattern("MM/dd/yyyy").format(zonedDateTime);
ZonedDateTime zoneDate = ZonedDateTime.parse(date);

Получение ошибки:

Исключение в потоке "main" java.time.format.DateTimeParseException: текст '12/05/2018' не может быть проанализирован с индексом 0

Или, если я преобразую свое значение в строку с требуемым форматом, а затем снова попытаюсь проанализировать его обратно с временем ZonedDate с моим форматом:

DateTimeFormatter format = DateTimeFormatter.ofPattern("MM/dd/yyyy");
ZonedDateTime zonedDateTime = ZonedDateTime.now();
String date = DateTimeFormatter.ofPattern("MM/dd/yyyy").format(zonedDateTime);
ZonedDateTime zonedate = ZonedDateTime.parse(date, format);

Я получаю ошибку:

Исключение в потоке "main" java.time.format.DateTimeParseException: текст "12/05/2018" не может быть проанализирован: невозможно получить ZonedDate Time из TemporalAccessor: {},ISO разрешено до 2018-12-05 типа java.time.format.Parsed

Я видел много вопросов по этому вопросу, но я продолжаю получать эти ошибки синтаксического анализа

1 ответ

Есть две проблемы. Во-первых, в дате нет информации о зоне, а во-вторых, нет информации о времени. Вы можете преобразовать его в LocalDate:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
ZonedDateTime zonedDateTime = ZonedDateTime.now();
String date = formatter.format(zonedDateTime);
LocalDate localdate = LocalDate.parse(date, formatter);

И вы можете преобразовать LocalDate к ZonedDateTime установив время на время в начале дня, а зону - на системную зону по умолчанию. В противном случае вам нужно будет предоставить время и ZoneId по вашему выбору.

ZonedDateTime zdt = localdate.atStartOfDay(ZoneId.systemDefault());
Другие вопросы по тегам