Формат 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());