Java 8 LocalDate.plusMonths 增加了天数和月数

Baz*_*ner 0 java scala date date-formatting java-time

将月份添加到 LocalDate 时,我遇到了奇怪的格式问题。这是 Scala 代码和输出:

val virtualToday: LocalDate = LocalDate.parse("2015-01-01")
val eightDaysFromToday: LocalDate = virtualToday.plusDays(8)
val sixMonthsFromToday: LocalDate = virtualToday.plusMonths(6)

println("virtualToday " + virtualToday)
println("eightDaysFromToday " + eightDaysFromToday)
println("sixMonthsFromToday " + sixMonthsFromToday)

println(
      "virtualToday with formatting " + virtualToday
        .format(DateTimeFormatter.ofPattern("D MMMM Y"))
    )
println(
      "eightDaysFromToday with formatting " + eightDaysFromToday
        .format(DateTimeFormatter.ofPattern("D MMMM Y"))
    )
println(
      "sixMonthsFromToday with formatting " + sixMonthsFromToday
        .format(DateTimeFormatter.ofPattern("D MMMM Y"))
    )
Run Code Online (Sandbox Code Playgroud)

这是输出:

虚拟
今天 2015-01-01
八天从今天 2015-01-09六个月从今天 2015-07-01

virtualToday 格式为 2015 年 1 月 1 日
八天FromToday 格式为2015 年 1 月9 日
SixMonthsFromToday 格式为 2015 年 7 月 182 日

正如您所看到的,它正确地将月份增加了 6 个月,但它也将天数增加了 6 个月。如何将格式化的 SixMonthsFromToday 日期设为 2015 年 7 月 1 日?

aku*_*ykh 6

退房DateTimeFormatter。这D一年中的一天。如果你想要每月使用的日期d

  • 此外,如果您想要纪元年份而不是基于周的年份,请使用“y”而不是“Y”。 (3认同)
  • @deHaar 这实际上是一个重要的补充,谢谢。虽然这个错误可能会很长时间被忽视,但当它最终出现时肯定会让用户感到困惑。它会的。 (2认同)