首页 > 解决方案 > 格式化 ZonedDateTime

问题描述

我需要格式化 ZonedDate 时间来格式化MM/dd/yyyy.

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

得到错误:

线程“主”java.time.format.DateTimeParseException 中的异常:无法在索引 0 处解析文本“12/05/2018”

或者,如果我将值转换为具有所需格式的字符串,然后尝试再次使用我的格式将其解析回 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);

我得到错误:

线程“主”java.time.format.DateTimeParseException 中的异常:无法解析文本“12/05/2018”:无法从 TemporalAccessor 获取 ZonedDateTime:{},ISO 解析为 java.time 类型的 2018-12-05 .format.Parsed

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

标签: javadatetime-parsingzoneddatetime

解决方案


有两个问题。首先,日期中没有区域信息,其次,没有时间信息。您可以将其转换为LocalDate

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

您可以通过将时间设置为一天开始的时间并将区域设置为默认系统区域来将 a 转换LocalDate为 a 。ZonedDateTime否则,您需要提供时间和ZoneId您选择的时间。

ZonedDateTime zdt = localdate.atStartOfDay(ZoneId.systemDefault());

推荐阅读