Java DateTimeFormatter从星期一开始

Java DateTimeFormatter从星期一开始,java,groovy,datetime-format,Java,Groovy,Datetime Format,我试图用DateTimeFormatter格式化当前日期,我几乎得到了我需要的,但我的问题似乎是一周中的几天是从星期天开始计算的,而不是从星期一开始。例如,如果我在周二运行以下代码 import java.time.LocalDateTime import java.time.format.DateTimeFormatter; final LocalDateTime currentTime = LocalDateTime.now() def DATE = currentTime.format(D

我试图用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
。在中有一个
本地化的星期几
模式
文档,这是
e/c
选项,然而,在我的情况下,它似乎没有改变任何东西。我在欧洲(格林尼治标准时间+1),从周一开始计算周数。我使用的服务器也位于同一时区,但我的桌面和服务器上的输出仍然相同。我做错了什么?有没有办法在DateTimeFormatter中枚举从周一开始的周数?

您可以给
DateTimeFormatter
一个带有
withLocale
的区域设置:

currentTime.format(DateTimeFormatter.ofPattern("YYYY'cw'w'd'e").withLocale(Locale.UK));
或者将其作为第二个参数传递给模式的

currentTime.format(模式的DateTimeFormatter.of(“yyyyy'cw'd'e”,Locale.UK))

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


UK
区域设置从周一开始计算周天数,因此如果您只想以这种特定方式格式化工作日,则可以使用该区域设置。

您可以为
DateTimeFormatter
提供一个带有
withLocale
的区域设置:

currentTime.format(DateTimeFormatter.ofPattern("YYYY'cw'w'd'e").withLocale(Locale.UK));
或者将其作为第二个参数传递给模式的

currentTime.format(模式的DateTimeFormatter.of(“yyyyy'cw'd'e”,Locale.UK))

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


UK
区域设置从周一开始计算周天数,因此如果您只想以这种特定的方式设置工作日的格式,可以使用它。

您可以直接将区域设置传递给ofPattern()方法。@Olivier我不太喜欢它的读法。。。但还是编辑了。谢谢withLocale()返回一个新对象,因此将区域设置传递给ofPattern()可以保存一个实例化。您可以直接将区域设置传递给ofPattern()方法。@Olivier我不太喜欢它的读取方式。。。但还是编辑了。谢谢withLocale()返回一个新对象,因此将区域设置传递给ofPattern()可以保存一个实例化。