在 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
我有以下 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