因此,我一直在绞尽脑汁地思考这个(应该是)简单的练习,以使程序将日期字符串转换为GregorianCalendar
对象,格式化它,完成后再次以字符串形式返回。
这是程序的最后一点,它从文件中获取大量文本,将其分解为单独的记录,然后将记录分解为单独的数据片段并将它们分配给人员对象。
我已经在多个地方检查了代码,代码完全按照预期执行,直到我调用 format 函数,该函数抛出一个IllegalArgumentException
. The GergorianCalendar
对象被分配了它应该分配的值(尽管打印它又是一个完全不同的故事,如下所示......),但格式不会接受对象进行格式化。
不幸的是,老师不太清楚如何使用GregorianCalendar
and 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=美国/温哥华,offset=-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=?,年=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,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND= 0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
年、月和日值都是正确的,因为它们是我在创建它时传递的数字。
想法、建议,我还接近吗?
Edit
原始问题已解决(谢谢 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
上课,试图让他们同时工作。
感谢大家为正确输入日期提供的帮助!