Использование GregorianCalendar с SimpleDateFormat

Таким образом, я ломал голову над этим (должно быть) простым упражнением, чтобы заставить программу превратить строку даты в объект GregorianCalendar, отформатировать ее и вернуть снова в виде строки, когда это будет сделано.

Это последняя небольшая часть программы, которая берет фрагмент текста из файла, разбивает его на отдельные записи, затем разбивает записи на отдельные фрагменты данных и назначает их объекту person.

Я проверил код в нескольких местах, и код делает именно то, что он должен делать, до тех пор, пока я не вызову функцию форматирования, которая вызывает исключение IllegalArgumentException. Объекту GergorianCalendar назначают значения, которые он должен назначить (хотя печать это, опять же, совсем другая история, как показано ниже ...), но формат не будет принимать объект для форматирования.

К сожалению, инструктор не был слишком уверен в том, как использовать GregorianCalendar и SimpleDateFormat (но поручил нам работать с ними), и сказал: "Просто Google, это" ... Я пытался, и ничего, что я нашел, не помогло.

Код, который у меня пока есть:

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

Я получаю ошибку:

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)

И еще, я даже использую право GregorianCalendar ?? Когда я распечатываю значение этого объекта (должна быть дата, верно?), Я получаю это:

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Vancouver",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=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,ERA=?,YEAR=1985,MONTH=4,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=22,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]

Значения year, month и day_of_month являются правильными, поскольку они являются числами, которые я передал при его создании.

Мысли, предложения, я даже близко?

edit

исходные проблемы устранены (спасибо, ассилий!), но я все еще не могу печатать должным образом, потому что две функции не связаны, и необходимо, чтобы значение даты GregorianCalendar было распечатано из объекта person (поскольку дата рождения - это GregorianCalendar).

Обновленный код:

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

}

last edit

Итак, кажется, что я идиот, и DIDN 'T нужно связать две функции DateUtil вместе, но использовать их в тандеме. Сначала преобразуйте дату рождения в GregorianCalendar и сохраните ее в объекте person. Затем в заявлении на печать просто скажите программе отформатировать эту дату, когда она печатается. Проблема была решена. Теперь все работает в соответствии со спецификациями, и я чувствую себя намного глупее, потому что в последний день или около того с классом DateUtil я бился, как рыба, из воды, пытаясь заставить их работать одновременно.

Спасибо всем за помощь в получении даты, чтобы войти правильно!

Ответы на вопрос(5)

Ваш ответ на вопрос