为什么Calendar.before()和Calendar.after()接受对象值?

3

我遇到了一个问题,因为我试图将日期传递给Calendar.before()和Calendar.after(),而不是传递Calendar。

如果传递一个日期,这些方法总是返回false。


3
这个方法首先检查 when 是否是 Calendar 的实例。根据 Java 文档的说法,只有当 whenCalendar 实例时才会这样。至于为什么,我不清楚。 - Sotirios Delimanolis
2
我相信没有一个好的理由。日历API被普遍认为设计不佳。JDK8真的解决了所有问题,但很多人无法升级。Joda时间是第三方替代品,适用于无法使用JDK 8的人。 - user2684301
2个回答

2
可能是因为有人可以编写 Calendar 的子类,使用各种数据类型(如 Date),而不会破坏 Calendar.before(Object)Calendar.after(Object) 方法的签名。除此之外,没有其他好的理由可以想到。所以可能你必须接受它。
您还可以查看Calendar.before(Object when), why Object?

Calendar的子类仍然可以安全自动地转换为Calendar,因此这不是一个有效的理由。 - user2684301
@user2684301:- 是的,我同意这不是一个有效的理由,但我想到了它。我认为可能没有好的理由来解释这个问题! - Rahul Tripathi

0

日历在接收对象时不是以字符串格式化的日期形式。

为使其正常工作,请尝试发送:

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));

Calendar.before(cal);

应该可以了。

至于为什么 - 我认为没有一个真正好的理由,整个类都过于复杂了。


3
OP问的是“为什么”,而不是“如何”。 - BLaZuRE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接