GregorianCalendar mit SimpleDateFormat verwenden

Also habe ich mir über diese (eigentlich) einfache Übung Gedanken gemacht, damit das Programm eine Datumszeichenfolge in ein GregorianCalendar-Objekt umwandelt, es formatiert und es als Zeichenfolge zurückgibt, wenn es fertig ist.

Dies ist das letzte kleine Stück eines Programms, das einen Text aus einer Datei aufnimmt, in einzelne Datensätze aufteilt, die Datensätze dann in einzelne Datenstücke aufteilt und sie einem Personenobjekt zuordnet.

Ich habe den Code an mehreren Stellen überprüft und der Code macht genau das, was er tun soll, bis ich die Format-Funktion aufrufe, die eine IllegalArgumentException auslöst. Dem GergorianCalendar-Objekt werden die Werte zugewiesen, die ihm zugewiesen werden sollen (auch wenn es sich beim Drucken um eine ganz andere Geschichte handelt, wie unten dargestellt ...), das Format akzeptiert das Objekt jedoch nicht zur Formatierung.

Leider war sich der Kursleiter nicht sicher, wie er den GregorianCalendar und SimpleDateFormat verwenden sollte (hat uns jedoch beauftragt, mit ihnen zu arbeiten) und sagte "Just Google it" ... Ich habe es versucht, und nichts, was ich gefunden habe, hat geholfen.

Der Code, den ich bisher habe, ist:

public class DateUtil {

    public static GregorianCalendar convertFromDMY(String dd_mm_yy) throws ParseException{

        // this actually works, got rid of the original code idea
        String[] splitDate = dd_mm_yy.split("-");
        int days = Integer.parseInt(splitDate[0]);
        int month = Integer.parseInt(splitDate[1]);
        int year = Integer.parseInt(splitDate[2]);

        // dates are going in right, checked in print statement,
        // but the object is not getting formatted...
        GregorianCalendar dateConverted = new GregorianCalendar(year, month, days);
        format(dateConverted);
        return dateConverted;
    }

    public static String format(GregorianCalendar date){

        SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");
        String dateFormatted = fmt.format(date);
        return dateFormatted;
    }
}

Der Fehler, den ich erhalte, ist:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object >as a Date

    at java.text.DateFormat.format(DateFormat.java:281)
    at java.text.Format.format(Format.java:140)
    at lab2.DateUtil.format(DateUtil.java:26) 
    at lab2.DateUtil.convertFromDMY(DateUtil.java:19)
    at lab2.Lab2.createStudent(Lab2.java:75)
    at lab2.Lab2.main(Lab2.java:34)

Und noch etwas, benutze ich überhaupt den Gregorianischen Kalender? Wenn ich den Wert des Objekts ausdrucken (sollte ein Datum stimmen?), Erhalte ich Folgendes:

java.util.GregorianCalendar [time = ?, areFieldsSet = false, areAllFieldsSet = false, lenient = true, zone = sun.util.calendar.ZoneInfo [id = "America / Vancouver", offset = -28800000, dstSavings = 3600000, useDaylight = true, Übergänge = 189, lastRule = java.util.SimpleTimeZone [id = America / Vancouver, Offset = -28800000, dstSavings = 3600000, useDaylight = true, startYear = 0, startMode = 3, startMonth = 2, startDay = 8, startDayOfWeek = 1, startTime = 7200000, startTimeMode = 0, endMode = 3, endMonth = 10, endDay = 1, endDayOfWeek = 1, endTime = 7200000, endTimeMode = 0]], firstDayOfWeek = 1, minimalDaysInFirstWeek = 1? JAHR = 1985, MONAT = 4, WOCHEN_OF_YEAR = ?, WOCHEN_OF_MONTH = ?, TAG_OF_MONTH = 22, TAG_OF_YEAR = ?, TAG_OF_WEEK = ?, TAG_OF_WEEK_IN_MONTH =? 0, MILLISECOND = ?, ZONE_OFFSET = ?, DST_OFFSET =?]

Die Werte year, month und day_of_month sind alle korrekt, da sie die Zahlen sind, die ich bei der Erstellung angegeben habe.

Gedanken, Vorschläge, bin ich auch nah dran?

bearbeiten

Die ursprünglichen Probleme wurden behoben (danke, Assylias!), aber ich kann immer noch nicht richtig drucken, da die beiden Funktionen nicht verknüpft sind und ein GregorianCalendar-Datumswert aus dem Personenobjekt gedruckt werden muss (da das Geburtsdatum ein GregorianCalendar ist).

Aktualisierter Code:

public class DateUtil {

    static SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");

    public static GregorianCalendar convertFromDMY(String dd_mm_yy) throws ParseException{

        // this actually works, got rid of the original code idea
        String[] splitDate = dd_mm_yy.split("-");
        int days = Integer.parseInt(splitDate[0]);
        int month = (Integer.parseInt(splitDate[1]) - 1);
        int year = Integer.parseInt(splitDate[2]);

        // dates go in properly
        GregorianCalendar dateConverted = new GregorianCalendar(year, month, days);
        String finalDate = format(dateConverted);
        return ;
    }

    public static String format(GregorianCalendar date) throws ParseException{

       fmt.setCalendar(date);
        String dateFormatted = fmt.format(date.getTime());
        System.out.println(dateFormatted);
        return dateFormatted;
    }

}

Letzte Änderung

Ok, es sieht so aus, als wäre ich ein Idiot und brauchte die beiden DateUtil-Funktionen NICHT miteinander zu verknüpfen, sondern sie zusammen zu verwenden. Konvertieren Sie zunächst das Geburtsdatum in einen Gregorianischen Kalender und speichern Sie es im Personenobjekt. Dann teilen Sie dem Programm in der print-Anweisung einfach mit, dass das Datum beim Drucken formatiert werden soll. Problem wurde gelöst. Alles funktioniert jetzt nach den Vorgaben, und ich bin so dumm, weil ich den letzten Tag oder so mit der DateUtil-Klasse wie ein Fisch aus dem Wasser geflattert bin und versucht habe, sie gleichzeitig zum Arbeiten zu bringen.

Vielen Dank für die Hilfe, damit das Date richtig läuft!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage