gpt4 book ai didi

java - YYYY-ww 的 DateTimeFormatter 在 mac 和 ubuntu 上解析不同

转载 作者:行者123 更新时间:2023-12-05 09:27:24 42 4
gpt4 key购买 nike

System.out.println(
DateTimeFormatter.ofPattern("YYYY-ww").withZone(ZoneOffset.UTC).format(Instant.parse("2022-05-10T00:00:00.00Z"))
);
System.out.println(
DateTimeFormatter.ofPattern("YYYY-ww").withZone(ZoneOffset.UTC).format(Instant.parse("2022-05-17T00:00:00.00Z"))
);

为什么这个模式 YYYY-ww 在 Ubuntu 和 Mac 上解析不同:

Ubuntu:(默认语言环境 en_US,我的电脑)

2022-20
2022-21

Mac:(默认语言环境 en_GB)

2022-19
2022-20

编辑

System.out.println(
DateTimeFormatter.ofPattern("YYYY-ww").withLocale(Locale.UK).withZone(ZoneOffset.UTC).format(Instant.parse("2022-05-10T00:00:00.00Z"))
);
System.out.println(
DateTimeFormatter.ofPattern("YYYY-ww").withLocale(Locale.UK).withZone(ZoneOffset.UTC).format(Instant.parse("2022-05-17T00:00:00.00Z"))
);

返回:

2022-19
2022-20

不过,问题是为什么模式 ww 是 Locale 特定的?我在 https://docs.oracle.com/javase/8/docs/api/java/time/temporal/WeekFields.html 的文档中没有看到这一点或 https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

最佳答案

在美国地区,一年的第一周可以有 1 到 7 天,而在英国,一年的第一周至少需要 4 天。

WeekFields.of(Locale.UK).getMinimalDaysInFirstWeek() // 4
WeekFields.of(Locale.US).getMinimalDaysInFirstWeek() // 1

此外,美国的一周从周日开始,而英国的一周从周一开始。

这意味着对于美国来说,2022 年的第一周是 2022-01-01 的单个星期六,2022-01-02 是第二周的开始。另一方面,对于英国,2022 年的第一周从 2022-01-03 开始​​,因为一年的前两天不构成一周。这就是美国机器多出一周的时间。

使用 ofPattern 创建 DateTimeFormatter 时,使用机器的默认格式化语言环境:

The formatter will use the default FORMAT locale. This can be changed using withLocale(Locale) on the returned formatter

因此有所不同。

我想你想要标准的 ISO 8601 weeks在这里,不想与语言环境有任何关系。一种方法是使用 IsoFields 构造一个 DateTimeFormatter:

var dtf = new DateTimeFormatterBuilder()
. appendValue(IsoFields.WEEK_BASED_YEAR, 4)
.appendLiteral('-')
.appendValue(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 2)
.toFormatter().withZone(ZoneOffset.UTC);
System.out.println(
dtf.format(Instant.parse("2022-05-10T00:00:00.00Z"))
);
System.out.println(
dtf.format(Instant.parse("2022-05-17T00:00:00.00Z"))
);

关于java - YYYY-ww 的 DateTimeFormatter 在 mac 和 ubuntu 上解析不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72435074/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com