首页 > 解决方案 > Scala 中 ZonedDateTime 的排序

问题描述

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

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

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

标签: scalasortingzoneddatetime

解决方案


实施OrderingforZonedDateTime并且您可以使用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

推荐阅读