Java 按日期比较DateTime对象
我希望有人能帮助我,知道乔达时间相当好。代码如下:Java 按日期比较DateTime对象,java,datetime,jodatime,Java,Datetime,Jodatime,我希望有人能帮助我,知道乔达时间相当好。代码如下: DateTimeComparator comparator = DateTimeComparator.getInstance( DateTimeFieldType.dayOfMonth(), DateTimeFieldType.year()); java.sql.Date beforeDate = new java.sql.Date(1372910400000L); // July 4 2013 java.sql.Date nowD
DateTimeComparator comparator = DateTimeComparator.getInstance(
DateTimeFieldType.dayOfMonth(), DateTimeFieldType.year());
java.sql.Date beforeDate = new java.sql.Date(1372910400000L); // July 4 2013
java.sql.Date nowDate = new java.sql.Date(System.currentTimeMillis());
DateTime beforeDateTime = new DateTime(beforeDate);
DateTime nowDateTime = new DateTime(nowDate);
int result = comparator.compare(nowDateTime, beforeDateTime);
System.out.println(nowDate+" compared to "+beforeDate+" = "+result);
从Javadocs API进行比较:
返回:
如果顺序不重要,则为零;如果lhsObj我做错了什么 看起来您从比较中排除了年份,这使得2015年3月小于2004年7月。
从
getInstance(DateTimeFieldType下限,DateTimeFieldType上限)
返回具有下限和上限的DateTimeComparator。场
小于下限的震级不包括在比较范围内。
震级大于或等于上限的场为
也被排除在比较之外。任一限制都可以指定为null,
这表示一个无限的限制
给定当前代码示例,您希望传递
null
作为DateTimeComparator
的上限,以便按日期正确比较DateTime
对象:
DateTimeComparator.getInstance(DateTimeFieldType.dayOfMonth(), null);
这意味着“在月日的基础上比较DateTime
对象,以及比这更广泛的所有内容,将时间等更精确的字段视为相等”
但事实上,这根本不是你想对JodaTime做的。JodaTime为不同的操作提供了许多不同的日期和时间类,如果您的目标是比较日期,则需要使用。它的
.compareTo()
工作原理完全符合您的预期:
new LocalDate().compareTo(new LocalDate(2013,7,4)) // returns 1
请注意,java.sql.Date
只存储日期信息,而不存储时间或时区信息。通过构造一个DateTime
对象,可以人为地将时间和时区与日期关联起来java.sql.Date
在Joda时间内的正确同级是LocalDate
当您关心日期时,请使用LocalDate
;当您关心时间时,请使用;当您关心给定日期的时间时,请使用。这些类的共同点是它们代表了我们对时间的抽象概念,而不是历史上的瞬间。这可能看起来很奇怪,但这往往是你真正想要的。文档中的关键概念对此进行了详细介绍
只有当您确实需要实时讨论实例时,才应该使用
DateTime
及其相关类。这实际上并不像您想象的那样常见于日期/时间密集型代码。从Local*
类开始,看看它们是否能满足您的用例。这就解释了。谢谢
new LocalDate().compareTo(new LocalDate(2013,7,4)) // returns 1