在 Scala 中对 ZonedDateTime 进行排序

sorting of ZonedDateTime in Scala

我有以下 ZonedDateTime 列表,它基本上是从 Scala 中的 xml 字段读取的:

var timestamps =  List[ZonedDateTime]()
timestampNodes.foreach(node => timestamps = timestamps :+ ZonedDateTime.parse(node.text, DateTimeFormatter.ISO_OFFSET_DATE_TIME))

对时间戳列表进行排序以使条目从最旧到最新排序的最佳和最快方法是什么?

.sortWith() 应该可以。

import java.time.{ZonedDateTime => ZDT}

val sortedtimestamps: List[ZDT] =
  timestampNodes.map(node => ZDT.parse(node.text))
                .sortWith(_.isBefore(_))

通过 Scastie.

测试的 Scala 2.11.12

ZonedDateTime 实施 Ordering,您可以使用 List.sorted:

import java.time._
import scala.math.Ordering.Implicits._

implicit val zonedDateTimeOrdering: Ordering[ZonedDateTime] =
    _ compareTo _

val base = ZonedDateTime.of(
    LocalDate.of(2021, 1, 1),
    LocalTime.MIDNIGHT,
    ZoneOffset.UTC
)

List(
    base.plusHours(1),
    base.plusHours(4),
    base.plusHours(2)
).sorted      // ==> a list with oldest first

已使用 Scala 2.13 进行测试,但应适用于 Scala 2.12 及更高版本。

奖金

添加导入,您可以将 ZonedDateTime 变量与 <<=> 等进行比较

import scala.math.Ordering.Implicits._

base <= base.plusMinutes(10) // ==> true