DateTimeFormatter 未按照以下代码段提供2018年12月30日和31日的正确格式.
final String DATE_FORMAT = "YYYYMM";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(DATE_FORMAT);
LocalDateTime startDate = LocalDateTime.of(2018,12,29,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201812
LocalDateTime startDate = LocalDateTime.of(2018,12,30,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201912 <------ should be 201812
LocalDateTime startDate = LocalDateTime.of(2018,12,31,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201912 <------ should be 201812
Run Code Online (Sandbox Code Playgroud)
这是预期的行为还是DateTimeFormatter存在错误?
当我在设置为 2017 年 1 月 1 日的 LocalDate 上使用 DateTimeFormatter(代码如下)时,我以错误的年份值结束。
LocalDate.of(2017,1,1).toString
Run Code Online (Sandbox Code Playgroud)
这将正确显示 2017-01-01 而
LocalDate.of(2017,1,1).format(DateTimeFormatter.ofPattern("dd MMM YYYY"))
Run Code Online (Sandbox Code Playgroud)
给我:01 janv。2016. 你知道为什么会这样吗?
这是代码:
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1451438792953L), ZoneId.of("UTC"));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
String output = dateTimeFormatter.format(localDateTime);
Run Code Online (Sandbox Code Playgroud)
这是值localDateTime:
2015-12-30T01:26:32.953
Run Code Online (Sandbox Code Playgroud)
这是值output:
2016-12-30T01:26:32.953Z
Run Code Online (Sandbox Code Playgroud)
为什么要增加一年?
其中java.time.temporal.WeekFields有几种方法,有时会newYearWeek增加年数1。为什么?
这是一个奇怪的错误。