Итак, я ломал голову над этим (должно быть) простым упражнением, чтобы заставить программу превратить строку даты в объект 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
я бился, как рыба, из воды, пытаясь заставить их работать одновременно.
Спасибо всем за помощь в получении даты, чтобы войти правильно!