【问题标题】:get list of years/months/days/hours between two dates in scala获取scala中两个日期之间的年/月/日/小时列表
【发布时间】:2021-02-28 23:42:39
【问题描述】:

我有以下两个日期,我想要一个 scala 函数,它返回两个日期之间的月份列表,例如 31-12-2019 和 01-02-2020。

知道如何解决这个问题吗?

【问题讨论】:

  • 想要的输出是什么?你试过什么?
  • 你想要什么样的输出?

标签: list scala date


【解决方案1】:

它可能看起来像这样

import org.joda.time._

@tailrec
def findMonths(dt: DateTime, lastDt: DateTime, months: List[String] = Nil): List[String] = {
  val formatter = format.DateTimeFormat.forPattern("MMMM, yyyy")
  val nextMonth = dt.plusMonths(1)
  if (nextMonth.isBefore(lastDt.getMillis))
    findMonths(nextMonth, lastDt, months :+ formatter.print(nextMonth))
  else
    months
}

val res = findMonths(
  DateTime.parse("2019-12-31"), 
  DateTime.parse("2020-04-01")
)
println(res) // List("january, 2020", "february, 2020", "march, 2020")

【讨论】:

    【解决方案2】:

    使用java.time 库。

    import java.time.LocalDate
    import java.time.format.DateTimeFormatter
    
    val start = LocalDate.parse("31-12-2019"
                               ,DateTimeFormatter.ofPattern("dd-MM-yyyy"))
    val stop  = LocalDate.parse("01-02-2020"
                               ,DateTimeFormatter.ofPattern("dd-MM-yyyy"))
    
    LazyList.iterate(start)(_.plusMonths(1))
            .takeWhile(_.isBefore(stop.plusMonths(1)))
            .toList
            .map(_.format(DateTimeFormatter.ofPattern("yyyy-MM")))
    //res0: List[String] = List(2019-12, 2020-01, 2020-02)
    

    请注意,“月”仅被提及两次,为 .plusMonths()。将它们更改为.plusDays().plusYears(),这一切都按预期工作。当然,输出演示格式必须根据需要进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2010-10-05
      相关资源
      最近更新 更多