it-swarm.com.de

Der Monat wird nicht aus einem Datum gedruckt - Java DateFormat

So erhalten Sie einen Monat von einem Datum 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);

Dieser Code gibt Tag und Jahr zurück, aber nicht Monat.

ausgabe : 

0 - 30 - 2011
10
bigData

Dies liegt daran, dass Ihr Format falsch ist: Sie benötigen "MM/dd/yy" für den Monat, da "mm" für Minuten gilt:

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

Druckt 8 - 30 - 2011 (weil Monate nullbasiert sind; demo )

17
dasblinkenlight

Zuerst haben Sie mm in Ihrem Datumsformat verwendet, , das gemäß Javadocs "Minuten" ist. Sie stellen die Minuten auf 9 und nicht auf den Monat ein. Es sieht so aus, als wäre der Monat standardmäßig auf 0 (Januar) eingestellt.

Verwenden Sie MM (Großbuchstaben), um den Monat zu analysieren. Dann wird 8 angezeigt, da in Calendar Monaten mit 0 und nicht mit 1 beginnt. Fügen Sie 1 hinzu, um den gewünschten 9 zurückzuholen.

Der erste Monat des Jahres in den gregorianischen und julianischen Kalendern ist JANUAR ist 0

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

und später

int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
5
rgettman

Wenn Sie die SimpleDateFormat javadoc lesen, werden Sie feststellen, dass mm Minuten dauert. Sie benötigen MM für Monat.

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

Andernfalls liest das Format kein month-Feld und nimmt den Wert 0 an.

Zeit für jemanden, der die moderne Antwort gibt. Die anderen Antworten waren gute Antworten, als die Frage 2013 gestellt wurde und sind immer noch richtig. Heute gibt es keinen Grund, warum Sie mit der alten, veralteten und gleichzeitig notorisch lästigen Klasse SimpleDateFormat kämpfen sollten. Java.time, die moderne Java-API für Datum und Uhrzeit, ist so viel angenehmer, mit:

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

Dies druckt

2011-09-30

Die LocalDate-Klasse stellt ein Datum ohne Tageszeit dar. Genau das, was Sie benötigen, entspricht Ihrer Anforderung viel genauer als die alten Klassen Date und Calendar.

Die mit DateTimeFormatter verwendeten Formatmusterzeichenfolgen ähneln denen von SimpleDateFormat, es gibt einige Unterschiede. Sie können MM in Großbuchstaben verwenden, um einen zweistelligen Monat (z. B. 09 für September) oder eine einzelne M zu benötigen, um den Monat mit einer oder zwei Ziffern zu schreiben. Ähnlich dd oder d für Tag des Monats. yy steht für ein zweistelliges Jahr und wird mit der Basis 2000 interpretiert, dh von 2000 bis einschließlich 2099 (würde an meinem Geburtstag nicht funktionieren).

Link: Oracle Tutorial Trail: Date Time Erläuterung der Verwendung von Java.time.

1
Ole V.V.

Das Monatsformat sollte MM anstelle von mm sein.

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

mmist für Minuten, verwenden Sie MM während Sie das Format angeben.

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

int month = cal.get(Calendar.MONTH);// returns month value index starts from 0
0
Dax Joshi

Versuchen Sie es mit MM anstelle von 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);

Der gedruckte Monat ist 8, da der Index bei 0 beginnt

oder probiere es mit: -

int month = cal.get(Calendar.MONTH) + 1;
0
Rahul Tripathi