我是一名中级java程序员,编写图书管理员Java应用程序,由于某种原因,我无法弄清楚是否应该使用dueDate.after(today) OR dueDate.before(today)方法来判断该书是否已逾期。通过键入两种方法,我得到了相当矛盾的价值观。因此,我也假设我的代码中还有其他一些错误,所以如果你能够确定哪个是正确的方法就好了,这样我就可以继续修复另一个bug。

有帮助吗?

解决方案

您需要dueDate.before(today):到期日是在今天之前;截止日期是过去的,所以这本书已经过期了。

如果交换周围的物体,可能会更容易?你会得到today.after(dueDate),如果你大声朗读它,它会突然变得非常清楚:<!>“如果今天是在截止日期之后,那么...... <!>

其他提示

请记住,beforeafter方法执行<(或>)比较,而不是<=(或>=比较)。这就是单词<!>“严格<!>”的含义。在API文档中。

此外,Java Date对象实际上是即时的,而不是人们通常认为的<!>“date <!>”。也就是说,它不仅可以比较日期,还可以比较一天中的时间。

如果您只想比较当天,而不检查当天的时间,请将所有截止日期设置为特定时间,例如午夜。例如,假设一本书将于10月26日到期。截止日期可能是10月27日午夜。

boolean overdue = !now.before(dueDate);

这个有点尴尬的否定说明了现在正好是10月27日凌晨12点。

dueDate.before(today)会转换为今天之前发生的书籍的实际到期日期,这意味着它实际上已经过期了。这可能是你想要的(假设你要检查是真的)

事情的另一面

dueDate.after(today)会转换为今天之后发生的图书的实际到期日期,这意味着它尚未到期。

!dueDate.after(today)dueDate.before(today)之间的唯一区别是当两个日期完全相同时的结果 - 可能是在截止日期返回时书籍没有过期,所以java.util.Date应该是正确的。

至于您未指明的其他问题:您是否知道<=>代表毫秒精度的时间点,而不是日历日期?这意味着,为了在日历日期中使用其比较方法,您必须确保在创建Date实例时将时间组件设置为零。问题的另一个原因可能是时区差异。

这取决于你想要达到的目标。 dueDate是您在出借书时想要设定的日期吗?截止日期是从图书的借出日期得出的,所以我会尝试像book.isDue(today)这样的方法,假设图书对象包含贷款和截止日期作为属性。

对于这样的问题,如果你在设计对象之间的动作之前明确自己涉及哪些对象以及它们之间的关系,它会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top