【问题标题】:Can't add days to Calendar无法将天数添加到日历
【发布时间】:2018-03-28 15:53:34
【问题描述】:

我正在尝试写一些东西,让某人可以在课堂上查看有声读物,并且应该将截止日期设置为 14 天后。我的班级有一个 toString() 方法,该方法应该打印出到期日期,但始终会打印出无论如何都应在 3/5 到期。

public String toString() // Prints specs of a Book object
{
    String str = "\nThe specs of this audiobook are: ";
    str += "\n\t Title: " + title;
    str += "\n\t Narrator: " + narrator;
    str += "\n\t Year: " + year;
    str += "\n\t Due Date: " + (getReturnDate().MONTH + 1) + "/" + getReturnDate().DATE;
    return str;
}
public Calendar getReturnDate() // Makes return date 14 days after today
{
    Calendar duedate = Calendar.getInstance();
    duedate.add(Calendar.DAY_OF_YEAR, 14);
    return duedate;
}

【问题讨论】:

    标签: java date calendar


    【解决方案1】:
    getReturnDate().MONTH
    

    没有按照你的意思做。它的值是Calendar.MONTH这个静态常量的值,我猜是2(确实可以看到是in the source)。

    我想你是说

    getReturnDate().get(Calendar.MONTH)
    

    此外,您不应该调用getReturnDate() 两次:如果您调用两次,您可能会得到不一致的日期。调用一次,将其分配给一个字段:

    Calendar returnDate = getReturnDate();
    // ...
    str += "Due date " + (returnDate.get(Calendar.MONTH) + 1) + "/" + returnDate.get(Calendar.DATE);
    

    但事实上,更好的解决方案是不使用这些已被有效弃用的旧 API。

    使用LocalDate

    LocalDate returnDate = LocalDate.now().plusDays(14);
    

    然后访问returnDate.getMonthValue()returnDate.getDayOfMonth() 字段。

    【讨论】:

    • 谢谢你,我会考虑使用 LocalDate 但任务说我们必须使用日历。
    • 多么蹩脚的任务。迫使人们使用过时的课程,而不是现代且更好的课程。
    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2010-10-08
    • 2012-02-22
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多