首页 > 解决方案 > 来自 LocalDate 和字符串的 Joda LocalDateTime

问题描述

我有:

它们中的任何一个都可以不存在(Scala 的Option)。

如何将这两者结合起来得到 joda LocalDateTime,即仅代表日期和时间而没有时区的实体?

标签: javascalajodatime

解决方案


要结合这两个选项,自然的方法是使用flatMap这样的方法:

val onlyDateOption: Option[LocalDate] = ???
val timeAndZoneOption: Option[String] = ???

val result: Option[LocalDateTime] = onlyDateOption.flatMap { onlyDate => 
  timeAndZoneOption.map { timeAndZone =>
    // Some logic here to build the LocalDateTime from onlyDate and timeAndZone
  }
}

也可以用for-comprehension更易读的方式编写:

val result: Option[LocalDateTime] =  for {
  onlyDate <- onlyDateOption
  timeAndZone <- timeAndZoneOption
} yield { 
  // Some logic here to build the LocalDateTime from onlyDate and timeAndZone
}

现在,如何使用 Joda 来构建您所期望的可能可以通过各种不同的方式完成,其中一种可能是:

onlyDate
  .toLocalDateTime(LocalTime.MIDNIGHT)
  .withHourOfDay(...) // hour extracted from the string somehow
  .withMinuteOfHour(...) // minute extracted from the string somehow

我不熟悉 Joda API,可能还有另一种更简单的方法


推荐阅读