当前位置: 首页 > 面试题库 >

为什么Java的java.time.format.DateTimeFormatter#format(LocalDateTime)增加一年?

佴淮晨
2023-03-14
问题内容

这是代码:

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);

这是值localDateTime

2015-12-30T01:26:32.953

这是值output

2016-12-30T01:26:32.953Z

为什么要增加一年?

其中java.time.temporal.WeekFields有几种方法,有时会newYearWeek增加年数1。为什么?

这是一个奇怪的错误。


问题答案:

从维基百科:

[YYYY]表示ISO周编号年份,与传统的公历年份略有不同(请参见下文)。

  1. YYYY 是本年度的ISO-8601样式表示形式。
  2. yyyy 是公历年份的表示形式。

由于两者的计算可以相差+1或-1,因此格式不同。在更多有用的信息YEAR_OF_ERAYEARweekBasedYear



 类似资料:
  • 问题内容: 为了挑战,一位高尔夫球手代码: 在Java8中运行此代码时,我们得到以下结果: 在Java 10中运行此代码时,我们得到以下结果: 使用Java 10完全没有编号。那么这里发生了什么呢?这是Java 10中的错误吗? 评论的后续行动: 使用Java 9或更高版本进行编译时会出现问题(我们在Java 10中找到了问题)。在Java 8上编译此代码,然后在Java 9或任何更高版本(包括J

  • 问题内容: 在上面,为什么(char1 + 1)或(char ++)不打印增量字符,而其他两个打印呢? 问题答案: 首先,我假设是因为您说的是工作量的增加,所以您确实指定了: 编辑 响应问题(=> )的更改,我看到了问题。输出是 之所以显示,是因为char 被提升为一个(二进制数字提升)加1。因此变成97(的ASCII值)和98个结果。 但是,或者不执行二进制数字提升,因此它可以按预期工作。 引用

  • 关系信息:Linux下Java的虚拟内存使用,内存使用太多

  • 问题内容: 我知道: 即时是用于计算的“技术”时间戳表示(纳秒)。 LocalDateTime是日期/时钟表示形式,包括人类的时区。 最后,对于大多数应用程序用例,IMO都可以视为两种类型。例如:当前我正在运行一个批处理作业,我需要根据日期计算下一次运行,并且我正在努力寻找这两种类型之间的优缺点(除了Instant和时区部分的纳秒级精度优势)的LocalDateTime)。 您可以列举一些应用示例

  • 对于一个挑战,一位code golfer同伴编写了以下代码: 在Java 8中运行这段代码时,我们得到如下结果: 在Java 10中运行这段代码时,我们得到如下结果: 使用Java 10的数字是完全关闭的。那么这里到底发生了什么?是Java 10号的bug吗? > 这个问题出现在Java书9或更高版本中(我们在Java书10中找到)。在Java 8上编译此代码,然后在Java 9或任何更高版本(包

  • 问题内容: 我有一个带有某些样式的简单html页面,但我不明白为什么会增加一些顶部边距? 来源如下: 如果我添加“ margin-top:0;” 到了空间已经消失了……但是直到我明白为什么我才感到不高兴。 问题答案: 上的空白来自浏览器添加到元素的默认样式。例如,如果您打开的并检查元素,您将看到这样的样式。该用户代理样式表是指浏览器默认样式。保证金变成16px为浏览器有一个默认。 由于浏览器之间的