java - 无法解析最近格式化的 ZonedDateTime Java 8

标签 java date

为什么要写这段代码

DateTimeFormatter SENT_DATE_FORMATTER = DateTimeFormatter.ofPattern("E, d MMM YYYY HH:mm:ss Z", Locale.US);
ZonedDateTime now = ZonedDateTime.now();
String dateStr = now.format(SENT_DATE_FORMATTER);
System.out.println(dateStr);

ZonedDateTime zoned = ZonedDateTime.parse(dateStr, SENT_DATE_FORMATTER);

在 sysout 行上打印正确的日期但在解析行上抛出 DateTimeParseException(无法从 TemporalAccessor 获取 ZonedDateTime)?

最佳答案

大写的 Y 代表基于周的年份,参见 javadoc .为了使解析器正常工作,您需要将其更改为年份 (u) 或年份 (y)。然后解析器可以创建日历年、月 (M) 和月中日 (d) 之外的日期。请记住,如果您的月份和日期接近日历年的开始或结束,那么基于周的年份可能与上一个或下一个日历年相关,而不是实际的日历年。因此,不可能将基于周的年份与日历年相等! 如果没有精确定义的日历年,就不可能形成日期。

否则,如果您的模式中也有基于星期几的年份 (w),那么您的解析器将能够理解输入,因为基于星期的年份 (Y)、星期的-week-based-year (w) 和 day-of-week (E) 也可以作为日期的可解释组合。

但是请注意,输入中与您的模式匹配的所有给定详细信息必须一致(例如 2015-08-31 是星期一而不是星期二)否则解析器将再次报错(至少在严格模式下)。

关于java - 无法解析最近格式化的 ZonedDateTime Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312993/

相关文章:

ios - dat转换IOS报错

date - 如何使用Hadoop生成时间序列?

java - 在java中将列表存储到文件中一段时间

javascript - JavaScript 中的日期格式转换

java - 在 Java 中从一个特定点循环到另一个点?

java - 访问不安全资源 oauth2 时访问 token 无效

Java数组长度小于0?

java - 使用 new Date() 作为唯一标识符

java - multipart和@RequestBody在spring可以一起用吗?

java - 如何在java中检查字符串变量是否包含负值