Java DateTimeFormatter 从星期一开始一周

Java DateTimeFormatter start week with Monday

我正在尝试使用 DateTimeFormatter 格式化当前日期,我几乎得到了我需要的,但我的问题似乎是一周中的几天是从星期日而不是星期一开始枚举的。因此,例如,如果我 运行 在星期二

下面的代码
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter;
final LocalDateTime currentTime = LocalDateTime.now()
def DATE = currentTime.format(DateTimeFormatter.ofPattern("YYYY'cw'w'd'e"))

我期望输出:2020cw10d2,但我得到的实际输出是 2020cw10d3。中有一个 localized day of week 模式 DateTimeFormatter 文档,这是 e/c 选项,但是,它似乎并没有改变我的情况。我位于欧洲 (GMT+1),从星期一开始计算周数。我使用的服务器也位于同一时区,但我的桌面和服务器上的输出仍然相同。我究竟做错了什么?有没有办法在 DateTimeFormatter 中枚举从星期一开始的星期数?

您可以为 DateTimeFormatter 指定语言环境 withLocale:

currentTime.format(DateTimeFormatter.ofPattern("YYYY'cw'w'd'e").withLocale(Locale.UK));

或者作为第二个参数传给ofPattern:

currentTime.format(DateTimeFormatter.ofPattern("YYYY'cw'w'd'e", Locale.UK));

但是,默认情况下,格式化程序应该使用您自己的语言环境,所以它会做一些您不期望的事情,这很奇怪。

UK 语言环境从星期一开始计算工作日,因此如果您只想以这种特定方式设置工作日的格式,则可以使用它。