Итак, я пытаюсь сделать это (должно быть) простым упражнением, чтобы программа превратила строку даты в объект GregorianCalendar, отформатировала ее и снова вернула в качестве строки, когда это будет сделано ,Использование GregorianCalendar с SimpleDateFormat
Это последняя небольшая часть программы, которая извлекает патч из файла, разбивает его на отдельные записи, а затем разбивает записи на отдельные части данных и присваивает их объекту-человеку.
Я проверил код в нескольких местах, и код выполняет именно то, что он должен делать до тех пор, пока я не вызову функцию формата, которая вызывает исключение 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 = America/Vancouver, смещение = - 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 = ?, Д ST_OFFSET =?]
Значения year, month и day_of_month являются правильными, поскольку они являются номерами, которые я передал в его создание.
Мысли, предложения, я даже близко?
редактировать
оригинальных вопросы прояснились (спасибо 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;
}
}
последнее редактирование
Ok так что кажется, что я идиотка и не нужно, чтобы связать эти две функции DateUtil вместе, но и использовать их в тандеме , Сначала преобразуйте дату рождения в GregorianCalendar и сохраните его в объекте person.Затем в заявлении на печать просто скажите программе, чтобы форматировать эту дату, когда она печатается. Проблема решена. Все работает в соответствии со спецификациями сейчас, и я чувствую, что много глупостей, потому что в последний день или около того с классом DateUtil я рычал как рыба из воды, пытаясь заставить их работать одновременно.
Благодарим за помощь в получении правильной даты!
FYI, чтобы форматировать код в StackOverflow, запустите строку с 4 (или более) пробелами. Используйте '>' только для кодов без кода. – assylias
ah хорошо знать, thanks = P – RejectionHurts