比较scala中大于等于的日期

时间:2017-10-26 07:22:13

标签: scala

情景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"

5 个答案:

答案 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)

我想出的解决类似案例的解决方案是:

  1. 交换 vals 和 2. 否定结果

场景二

val date1 = LocalDate.parse("2017-02-07")
val date2 = LocalDate.parse("2017-02-07")

!date2.isAfter(date1) // equiv. date1.isAfter(date2) || date1.isEqual(date2)