为什么SimpleDateFormat()返回错误的月份?

A P*_*Par -8 java

以下代码提供了错误的信息:

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

public class test {

    public static void main(String[] args) {

        GregorianCalendar fmt = new GregorianCalendar(2000, 7, 3);
        SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
        String result = df.format(fmt.getTime());

        System.out.println("fmt: " + result);

    }
}
Run Code Online (Sandbox Code Playgroud)

它输出:

fmt:2000年8月3日

虽然我需要月份为7月,因为我已将月份设定为7?

Sam*_*ica 8

我的猜测是,你期待的是第7个月July,但是这个month值是0,所以7月将由a表示6.

month - 用于在日历中设置MONTH日历字段的值.月值基于0.例如,1月份为0.

您可能还想输入4位数的日期

你最终会得到以下结果

GregorianCalendar fmt = new GregorianCalendar(1975, 6, 3);
Run Code Online (Sandbox Code Playgroud)

这是GregorianCalendar的文档


Lui*_*oza 7

正如其他人所说,您当前的代码存在两个问题:

  • 月份为零.所以,第7个月是8月,而不是7月= \
  • 年份默认情况下不会在1900年开始,而是在1970年开始,但如果您自己设定年份,您将获得与您设置的年份相同的年份,在这种情况下为75(不是1975年的预期).

要解决此问题,您可以创建GregorianCaledaras new GregorianCaledar(1975, 6, 3).或者甚至更好,停止直接使用这个类,而是使用抽象类Calendar:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 1975);
calendar.set(Calendar.MONTH, Calendar.JULY);
calendar.set(Calendar.DATE, 3);
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String result = df.format(calendar.getTime());
System.out.println("fmt: " + result);
Run Code Online (Sandbox Code Playgroud)

为什么用Calendar而不是GregorianCalendar?因为您应该始终使用抽象类/接口而不是类实现.