Month is not printed from a date - Java DateFormat

2019-01-09 15:35发布

How to get month from a date in 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);

This code return day and year but not month.

output :

0 - 30 - 2011

7条回答
手持菜刀,她持情操
2楼-- · 2019-01-09 15:39

mmis for minutes, use MM while specifying format.

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

int month = cal.get(Calendar.MONTH);// returns month value index starts from 0
查看更多
The star\"
3楼-- · 2019-01-09 15:41

Month format should be MM instead of mm

 DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
查看更多
姐就是有狂的资本
4楼-- · 2019-01-09 15:47

This is because your format is incorrect: you need "MM/dd/yy" for the month, because "mm" is for minutes:

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);

Prints 8 - 30 - 2011 (because months are zero-based; demo)

查看更多
5楼-- · 2019-01-09 15:53

First, you used mm in your date format, which is "minutes" according to the Javadocs. You set the minutes to 9, not the month. It looks like the month defaults to 0 (January).

Use MM (capital 'M's) to parse the month. Then, you will see 8, because in Calendar months start with 0, not 1. Add 1 to get back the desired 9.

The first month of the year in the Gregorian and Julian calendars is JANUARY which is 0

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

and later

int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
查看更多
时光不老,我们不散
6楼-- · 2019-01-09 15:57

Try like this using MM instead of 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);

The month printed will be 8 as index starts from 0

or try with:-

int month = cal.get(Calendar.MONTH) + 1;
查看更多
We Are One
7楼-- · 2019-01-09 15:58

If you read the SimpleDateFormat javadoc, you'll notice that mm is for minutes. You need MM for month.

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

Otherwise the format doesn't read a month field and assumes a value of 0.

查看更多
登录 后发表回答