Java 如何比较两个Joda时间段
这似乎并不过分 我正在尝试:Java 如何比较两个Joda时间段,java,jodatime,Java,Jodatime,这似乎并不过分 我正在尝试: @Override public int compare(Period o1, Period o2) { return o1.toStandardDays().getDays() > o2.toStandardDays().getDays() ? -1 : (o1.toStandardDays().getDays() == o2.toStandardDays().getDays() ? 0 : 1); } 但我有一个例外: java.lang.Uns
@Override
public int compare(Period o1, Period o2) {
return o1.toStandardDays().getDays() > o2.toStandardDays().getDays() ? -1 : (o1.toStandardDays().getDays() == o2.toStandardDays().getDays() ? 0 : 1);
}
但我有一个例外:
java.lang.UnsupportedOperationException: Cannot convert to Days as this period contains months and months vary in length
at org.joda.time.Period.checkYearsAndMonths(Period.java:1455)
at org.joda.time.Period.toStandardDays(Period.java:1314)
java.lang.UnsupportedOperationException:无法转换为天,因为此期间包含月,且月的长度不同
在org.joda.time.Period.checkYearsAndMonths上(Period.java:1455)
位于org.joda.time.Period.toStandardDays(Period.java:1314)
我希望Peroid
会有一个isLongerThan(p段)
方法。来自:
要比较两个时段的实际持续时间,请使用toDuration
将两个时段转换为持续时间,该操作强调结果可能因您选择的日期而异
两种toDuration
方法是和。这意味着您必须选择此时段的开始或结束时刻,以便能够计算其持续时间
如果这对您来说是个问题,您可能希望直接使用而不是
句点
我写了一个方法,应该能够将两个句点与最近的一天进行比较(我不关心小时和分钟):
请注意,该方法要求两个周期均正常化,否则无法给出准确的结果。正如马特·鲍尔在其回答中所解释的,要比较两个周期,需要先将它们转换为持续时间。持续时间是相对于某个时间点的,因此您需要执行以下操作:
public static boolean isLonger(Period p1, Period p2) {
Instant now = Instant.now();
Duration d1 = p1.toDurationTo(now);
Duration d2 = p2.toDurationTo(now);
return d1.isLongerThan(d2);
}
public static boolean isShorter(Period p1, Period p2) {
Instant now = Instant.now();
Duration d1 = p1.toDurationTo(now);
Duration d2 = p2.toDurationTo(now);
return d1.isShorterThan(d2);
}
“1个月30天”比“2个月”长还是短?@raticulin:而“未定义”正是你得到的。它表示为一个例外情况。@Joachim“未定义”是指您不知道自己得到的是“1个月,30天”还是“2个月”。例外情况并非如此。@raticulin这显然不是他们对
未定义的定义,也不是我的定义。当软件说“在这样或那样的条件下,行为是未定义的”时,你真的不能期待任何事情undefined
可能意味着计算返回意外值,或引发异常,或导致您的计算机死机。@matt不是“定义”或“您的定义”?@Benj感谢您的编辑,但该术语广泛用于指代文档生成器系统和/或其输出。许多项目和库提供指向JavaDoc页面的链接,这些页面是通过运行JavaDoc工具生成的。我不认为大多数人会对“JavaDoc”是否指JavaSE的API文档感到困惑或不清楚。也许是因为我是法国人?在这里,很多人使用(英语)“JavaDoc”来指代Oracle(以前的Sun)在线文档或书籍,然后是图书馆API。我至少学到了一些东西,我会在乎的;)+1.
public static boolean isLonger(Period p1, Period p2) {
Instant now = Instant.now();
Duration d1 = p1.toDurationTo(now);
Duration d2 = p2.toDurationTo(now);
return d1.isLongerThan(d2);
}
public static boolean isShorter(Period p1, Period p2) {
Instant now = Instant.now();
Duration d1 = p1.toDurationTo(now);
Duration d2 = p2.toDurationTo(now);
return d1.isShorterThan(d2);
}