Groovy:DateUtil.format"yyyy-MM-dd"在格式化时逐月递增

use*_*262 1 java groovy date

在我下面的groovy测试用例中,我有一些日期对象,后来我正在使用格式化DateUtil.format(calendarObj,"yyyy-MM-dd").但是当我打印结果时,它会将月份增加1.

例如:

Groovy代码:

def testDate=new GregorianCalendar(2000,1,30);
def testDate1=new GregorianCalendar(2000,1,5);
def testDate2=new GregorianCalendar(2000,4,25);
def testDate3=new GregorianCalendar(2000,6,10);
Run Code Online (Sandbox Code Playgroud)

输出(使用System.out.println(DateUtil.format(testDate/1/2/3,"yyyy-MM-dd"))):

2000-03-01
2000-02-05
2000-05-25
2000-07-10
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会发生这种情况.

Rob*_*sen 5

Java(以及扩展名为Groovy)的月份是从零开始的,因此1月份是02月份1,等等.

正如在评论中指出,这只是最初的Java日期/时间类(的情况下java.util.Date,java.util.Calendar...).

对于Java 8(java.time.LocalDate,...)中引入的(首选)新日期/时间API中的类,此行为已更改为更直观.

  • 不是"在Java中".在GregorianCalendar中.javax.time API应该比这个丑陋的GregorianCalendar更受欢迎,它使用了1个月. (3认同)
  • 你到那儿好帽子 (2认同)