日期格式化程序未正确格式化日期

Ani*_*noi 2 java datetime date simpledateformat

我用以下java代码编写了这个来格式化特定格式的日期和时间.您可以在ideone上看到以下代码.

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
class timeAndDateTransformation{
    public static void main(String[] argv){
            Calendar newDate = new GregorianCalendar(2009,7,1,15,20,00);
            SimpleDateFormat dateFormant = new SimpleDateFormat("yyyy/MM/dd");
            SimpleDateFormat timeFormant = new SimpleDateFormat("HH:mm:ss");
            System.out.println(dateFormant.format(newDate.getTime()).toString());
            System.out.println(timeFormant.format(newDate.getTime()).toString());
    }
Run Code Online (Sandbox Code Playgroud)

}

它给了我以下输出:

2009/08/01
15:20:00
Run Code Online (Sandbox Code Playgroud)

在这个输出中休息一切都完全没问题,除了月份.我作为一个月通过7但是在这个for-matter输出中它给出8作为输出.请指出我在哪里做错了.我对java的日期/日历类不是很熟悉,所以请耐心等待.

Nat*_*hes 7

月份是0,你通过7,所以解析到8月.

来自java.util.Date的api文档:

一个月由0到11的整数表示; 0是1月,1是2月,依此类推; 因此11月是12月.

将月份从零开始实际上是违反直觉的.我想我们在某些时候都被那个人烧了.

  • 你可以使用像`Calendar.AUGUST`这样的内置常量来避免这个问题. (2认同)