我有这行代码:
// I pass milliseconds timestamp on time var
ZonedDateTime zonedDatetIme = ZonedDateTime.ofInstant(java.time.Instant.ofEpochMilli(time), java.time.ZoneId.of("Asia/Almaty"))
Run Code Online (Sandbox Code Playgroud)
当我这次尝试输出时,它返回:
System.our.println(zonedDatetIme)
// returns
2020-01-24T17:00+06:00[Asia/Almaty]
Run Code Online (Sandbox Code Playgroud)
然后我试图格式化这个日期时间:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy hh:mm');
System.our.println(formatter.format(zonedDateTime));
Run Code Online (Sandbox Code Playgroud)
返回给我的是:
24.01.2020 05:00
Run Code Online (Sandbox Code Playgroud)
那是错的。这就像它减去我的时区的 6 小时而不是添加它。为什么会发生这种情况?
这是代码:
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。为什么?
这是一个奇怪的错误。