错误 - 公历 java.util.GregorianCalendar [time=1525903200000, areFieldsSet=true, areAllFieldsSet=true]

9 浏览
0 Comments

错误 - 公历 java.util.GregorianCalendar [time=1525903200000, areFieldsSet=true, areAllFieldsSet=true]

所以,我一直在思考这个(应该是)简单的练习,将一个日期字符串转换为 GregorianCalendar 对象,进行格式化,完成后再将其作为字符串返回。

这是一个程序的最后一步,该程序从文件中获取一块文本,将其分解为单个记录,然后将记录分解为单个数据片段并将其分配给一个人员对象。

我已经在多个地方检查了代码,直到我调用格式化函数之前,代码都正好做了它应该做的事情,但是在这里,它抛出了一个 IllegalArgumentExceptionGergorianCalendar 对象被分配了它应该分配的值(尽管打印它又是另一回事,如下所示...),但是格式化不会接受它以进行格式化。

不幸的是,这位讲师对如何使用 GregorianCalendarSimpleDateFormat 不太确定(但却让我们使用它们),他说:“去谷歌一下...”, 我试了,但是我没找到有用的东西。

到目前为止,我所拥有的代码是:

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 吗?当我打印出该对象的值(应该得到一个日期,对吧?)时,我得到了如下结果:

年份、月份和日期值都是正确的,因为它们都是我在创建时传入的数字。

有什么想法、建议,我是否接近了解决方案?

编辑

原本的问题已经解决(谢谢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类苦苦挣扎,试图让它们同时工作。

感谢所有帮助我正确设置日期的人!

admin 更改状态以发布 2023年5月21日
0
0 Comments

为什么会这么复杂?\n\n

public static GregorianCalendar convertFromDMY(String dd_mm_yy) throws ParseException 
{
    SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");
    Date date = fmt.parse(dd_mm_yy);
    GregorianCalendar cal = GregorianCalendar.getInstance();
    cal.setTime(date);
    return cal;
}

0
0 Comments

SimpleDateFormat.format() 方法使用 Date 作为参数。你可以通过调用 CalendargetTime() 方法获得一个 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;

0