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

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

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

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

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

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

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="Америка/Ванкувер",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=189,lastRule=java.util.SimpleTimeZone[id=Америка/Ванкувер,смещение=-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=? ]

Значения года, месяца и дня_месяца верны, поскольку это числа, которые я передал при его создании.

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

Редактировать

Первоначальные проблемы устранены (спасибо assylias!), но я все еще не могу правильно печатать, потому что две функции не связаны, а требования должны иметь значение даты 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;
    }

}

Последнее редактирование

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

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

28
задан Sae1962 29 June 2019 в 13:10
поделиться