情景1
val date1 = LocalDate.parse("2017-02-07")
val date2 =LocalDate.parse("2017-02-01")
date1.isAfter(date2)
输出
true
Scenerio 2
val date1 = LocalDate.parse("2017-02-07")
val date2 =LocalDate.parse("2017-02-07")
date1.isAfter(date2)
输出
false
我希望在日期为>时返回true
=" 2017-02-07"
答案 0 :(得分:3)
使用OR。 afaik,API中没有方法可以在单个操作中执行此操作
date1.isAfter(date2) || date1.isEqual(date2)
另一种选择:
date1.compareTo(date2) >=0
答案 1 :(得分:2)
在import scala.math.Ordering.Implicits._
之后,您可以写date1 >= date2
(您可能需要(date1: ChronoLocalDate) >= (date2: ChronoLocalDate)
,因为LocalDate
实施Comparable<ChronoLocalDate>
而不是Comparable<LocalDate>
,可以&# 39; t检查此刻)。
答案 2 :(得分:2)
我最喜欢的处理LocalDate比较的方法之一是使用implicit class
。您可以认为implicit class
就像C#中的扩展方法一样。
您可以如下定义隐式类:
import org.joda.time.{Days, LocalDate}
object LocalDateExtension {
class LocalDateExtension(a: LocalDate) {
def dayDiff(b: LocalDate): Int = {
Days.daysBetween(a, b).getDays.abs
}
def >(b: LocalDate): Boolean = {
a.isAfter(b)
}
def >=(b: LocalDate): Boolean = {
a.isAfter(b) || a.isEqual(b)
}
def <(b: LocalDate): Boolean = {
a.isBefore(b)
}
def <=(b: LocalDate): Boolean = {
a.isBefore(b) || a.isEqual(b)
}
}
implicit def extendLocalDate(a: LocalDate) = new LocalDateExtension(a)
}
然后您可以像这样使用扩展名:
val a = LocalDate("2010-04-29")
val b = LocalDate("2010-04-29")
print(a > b) // false
print(a >= b) // true
print(a < b) // false
print(a <= b) // true
希望您会发现它有用。
这里my blog post与此相关。
答案 3 :(得分:0)
启用LocalDate
排序的另一种方法是使用隐式转换为Long
(通过toEpochDay()
),其定义明确:
import java.time.LocalDate
val date1 = LocalDate.parse("2017-02-07")
val date2 = LocalDate.parse("2017-02-07")
import scala.math.Ordering.Implicits._
implicit def localDateOrderer: Ordering[LocalDate] = Ordering.by(d => d.toEpochDay)
date1 >= date2
// res1: Boolean = true
答案 4 :(得分:0)
我想出的解决类似案例的解决方案是:
场景二
val date1 = LocalDate.parse("2017-02-07")
val date2 = LocalDate.parse("2017-02-07")
!date2.isAfter(date1) // equiv. date1.isAfter(date2) || date1.isEqual(date2)