Итак, я ломал голову над этим (должно быть) простым упражнением, чтобы заставить программу превратить строку даты в объект 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 [время =?, areFieldsSet = ложь, areAllFieldsSet = ложь, мягко = верно, зона = sun.util.calendar.ZoneInfo [ID = "Америка/Ванкувер", смещение = -28800000, dstSavings = 3600000, useDaylight = верно, переходы = 189, lastRule = java.util.SimpleTimeZone [ID = Америка/Ванкувер, смещение = -28800000, dstSavings = 3600000, useDaylight = верно, StartYear = 0, StartMode = 3, StartMonth = 2, = startDay 8, startDayOfWeek = 1, начальный промежуток = 7200000, startTimeMode = 0, endMode = 3, endMonth = 10, endDay = 1, endDayOfWeek = 1, EndTime = 7200000, endTimeMode = 0]], firstDayOfWeek = 1, minimalDaysInFirstWeek = 1, ЭРА =?, ГОД = 1985, МЕСЯЦ = 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, ЧАС = 0, HOUR_OF_DAY = 0, МИНУТНЫЙ = 0, ВТОРОЙ = 0, миллисекунду =?, ZONE_OFFSET =?, DST_OFFSET =?]
Значения year, month и day_of_month являются правильными, поскольку они являются числами, которые я передал при его создании.
Мысли, предложения, я даже близко?
редактировать
Исходные проблемы устранены (спасибо, ассилиас!), Но я все еще не могу печатать должным образом, потому что две функции не связаны, и необходимо, чтобы значение даты 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 я бился, как рыба, из воды, пытаясь заставить их работать одновременно.
Спасибо всем за помощь в получении даты, чтобы войти правильно!