Usando GregorianCalendar com SimpleDateFormat

Então, tenho andado a criticar esse exercício simples (deveria ser) para fazer o programa transformar uma string de data em um objeto GregorianCalendar, formatá-lo e retorná-lo novamente como uma string quando estiver pronto.

Essa é a última parte de um programa que coleta um texto de um arquivo, divide-o em registros individuais, depois divide os registros em partes individuais de dados e os atribui a um objeto pessoa.

Eu verifiquei o código em vários lugares e o código faz exatamente o que deveria estar fazendo até eu chamar a função format, que lança um IllegalArgumentException. O objeto GergorianCalendar é atribuído aos valores que devem ser atribuídos (embora a impressão seja, novamente, toda uma outra história como visto abaixo ...), mas o formato não aceitará o objeto para formatação.

Infelizmente, o instrutor não estava muito certo de como usar o GregorianCalendar e SimpleDateFormat (ainda nos designou para trabalhar com eles) e disse: "Apenas o Google" ... Eu tentei, e nada que eu encontrei ajudou.

O código que tenho até agora é:

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

O erro que recebo é:

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)

E outra coisa, estou mesmo usando o GregorianCalendar certo ?? Quando eu imprimir o valor desse objeto (deve estar recebendo uma data certa?) Eu recebo isso:

java.util.GregorianCalendar [time = ?, areFieldsSet = false, areAllFieldsSet = falso, lenient = true, zona = sun.util.calendar.ZoneInfo [id = "América / Vancouver", deslocamento = -28800000, dstSavings = 3600000, useDaylight = true, transições = 189, lastRule = java.util.SimpleTimeZone [id = América / Vancouver, deslocamento = -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 = ?, ANO = 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, HORA = 0, HOUR_OF_DAY = 0, MINUTO = 0, SEGUNDO = 0, MILLISECOND = ?, ZONE_OFFSET = ?, DST_OFFSET =?]

Os valores de ano, mês e dia_de_mês estão corretos, pois são os números que passei para a criação dele.

Pensamentos, sugestões, estou mesmo perto?

editar

problemas originais foram resolvidos (obrigado, assylias!), mas ainda não consigo imprimir corretamente porque as duas funções não estão vinculadas e os requisitos devem ter um valor de data GregorianCalendar impresso a partir do objeto pessoa (como data de nascimento é um GregorianCalendar).

Código atualizado:

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

}

última edição

Ok, então parece que eu sou um idiota e não preciso ligar as duas funções DateUtil, mas usá-las em conjunto. Primeiro, converta a data de nascimento em um GregorianCalendar e armazene-a no objeto da pessoa. Em seguida, na declaração de impressão simplesmente diga ao programa para formatar essa data conforme ela está sendo impressa. Problema foi resolvido. Tudo funciona de acordo com as especificações agora, e eu sinto muito mais estúpido porque eu estava me debatendo como um peixe fora d'água no último dia ou mais com a classe DateUtil, tentando fazê-los trabalhar ao mesmo tempo.

Obrigado pela ajuda de todos em obter a data de ir corretamente!

questionAnswers(5)

yourAnswerToTheQuestion