错误 - 公历 java.util.GregorianCalendar [time=1525903200000, areFieldsSet=true, areAllFieldsSet=true]
错误 - 公历 java.util.GregorianCalendar [time=1525903200000, areFieldsSet=true, areAllFieldsSet=true]
所以,我一直在思考这个(应该是)简单的练习,将一个日期字符串转换为 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 Dateat 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
吗?当我打印出该对象的值(应该得到一个日期,对吧?)时,我得到了如下结果:
年份、月份和日期值都是正确的,因为它们都是我在创建时传入的数字。
有什么想法、建议,我是否接近了解决方案?
编辑
原本的问题已经解决(谢谢assylias!),但我仍然无法正确打印,因为这两个函数没有链接在一起,要求是从person对象中打印出一个GregorianCalendar日期值(因为出生日期是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类苦苦挣扎,试图让它们同时工作。
感谢所有帮助我正确设置日期的人!
SimpleDateFormat.format()
方法使用 Date
作为参数。你可以通过调用 Calendar
的 getTime()
方法获得一个 Date
。
public static String format(GregorianCalendar calendar) { SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy"); fmt.setCalendar(calendar); String dateFormatted = fmt.format(calendar.getTime()); return dateFormatted; }
还要注意月份是从0开始的,所以你可能想要:
int month = Integer.parseInt(splitDate[1]) - 1;