10

如何从java中的日期获取月份:

        DateFormat inputDF  = new SimpleDateFormat("mm/dd/yy");
        Date date1 = inputDF.parse("9/30/11");

        Calendar cal = Calendar.getInstance();
        cal.setTime(date1);

        int month = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DAY_OF_MONTH);
        int year = cal.get(Calendar.YEAR);

        System.out.println(month+" - "+day+" - "+year);

此代码返回日期和年份,但不返回月份。

输出 :

0 - 30 - 2011
4

7 回答 7

17

这是因为您的格式不正确:您需要"MM/dd/yy"月份,因为"mm"是分钟:

DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");

Calendar cal = Calendar.getInstance();
cal.setTime(date1);

int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);

System.out.println(month+" - "+day+" - "+year);

打印8 - 30 - 2011(因为月份是从零开始的;演示

于 2013-09-26T18:37:14.777 回答
5

首先,您使用mm了日期格式,根据 Javadocs 是“分钟”。您将分钟设置为9,而不是月份。看起来月份默认为 0(一月)。

使用MM(大写'M's)解析月份。然后,您会看到8,因为月份Calendar从 0 开始,而不是 1。添加1以取回所需的9.

公历和儒略历中的第一个月是 JANUARY,即 0

// MM is month, mm is minutes
DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");  

然后

int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
于 2013-09-26T18:37:15.287 回答
3

如果您阅读SimpleDateFormatjavadoc,您会注意到那mm是几分钟。你需要MM一个月。

DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");

否则,格式不会读取month字段并假定值为0.

于 2013-09-26T18:37:07.370 回答
1

月份格式应该MMmm

 DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
于 2013-09-26T18:37:16.220 回答
1

是时候有人提供现代答案了。其他答案在 2013 年问这个问题时是很好的答案,并且仍然是正确的。今天,你没有理由与旧的、过时的、同时臭名昭著的麻烦SimpleDateFormat类作斗争。java.time,现代 Java 日期和时间 API,使用起来更好:

    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("M/d/yy");
    LocalDate date1 = LocalDate.parse("9/30/11", inputFormatter);
    System.out.println(date1);

这打印

2011-09-30

该类LocalDate代表一个没有时间的日期,正是您所需要的,它比旧类DateCalendar.

与 from使用的格式模式字符串DateTimeFormatter类似SimpleDateFormat,但有一些区别。您可以使用大写MM来要求两位数的月份(如 09 表示九月)或使用单个M来允许使用一位或两位数书写月份。类似地ddd一个月中的一天。yy表示两位数的年份,并以 2000 为基数解释,即从 2000 到 2099(包括我的生日)。

链接Oracle 教程跟踪:日期时间解释如何使用java.time.

于 2018-01-10T11:29:41.250 回答
0

尝试这样使用MM而不是mm:-

    DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
    Date date1 = inputDF.parse("9/30/11");

    Calendar cal = Calendar.getInstance();
    cal.setTime(date1);

    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH);
    int year = cal.get(Calendar.YEAR);

    System.out.println(month+" - "+day+" - "+year);

打印的月份将是 8,因为索引从 0 开始

或尝试:-

int month = cal.get(Calendar.MONTH) + 1;
于 2013-09-26T18:37:30.463 回答
0

mm是分钟,MM在指定格式时使用。

Calendar cal = Calendar.getInstance();
cal.setTime(date1);

int month = cal.get(Calendar.MONTH);// returns month value index starts from 0
于 2013-09-27T03:47:58.097 回答