首页 > 解决方案 > DateTimeFormatter 在格式化后添加一年至今

问题描述

我正在尝试将格式2019-12-30的日期转换为具有格式的日期,30-12-2019为此我想到了使用DateTimeFormatter,为此我有以下代码:

LocalDate date = LocalDate.parse("2019-12-30");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-YYYY");
System.out.println(formatter.format(date));

然而,令我惊讶的是,这会返回一个输出:

30-12-2020

而不是预期的30-12-2019. 如果日期设置为2019-11-30,则正确返回30-11-2019。我做错了什么,但我无法弄清楚到底是什么。有人可以帮忙吗?

标签: javadatetime-format

解决方案


来自DateTimeFormatter文档:,表示符号,含义和示例:

Y 基于周的年份 1996 年;96

因此,您正在格式化基于周的年份,而不是常规年份。2019 年 12 月 30 日属于 2020 年的第一周,因此是您的输出。

使用yyyy(year-of-era) 或uuuu(year) 代替,YYYY你会得到 2019 代替。

基本上,YYYY通常应与w(week-of-week-based-year) 和E(day-of-week) 一起使用。


推荐阅读