格式化ZonedDateTime

时间:2018-12-05 20:20:37

标签: java datetime-parsing 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:无法在索引0处解析文本“ 12/05/2018”

或者如果我将值转换为具有所需格式的String,然后尝试再次将其解析为具有我格式的ZonedDate Time:

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”:无法从TemporalAccessor获得{ZonedDateTime:},ISO解析为类型为2018-12-05 java.time.format.Parsed

我已经看到了很多关于此的问题,但我不断遇到这些解析错误

1 个答案:

答案 0 :(得分:2)

有两个问题。首先,日期中没有区域信息,其次,没有时间信息。您可以将其转换为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());