Найти даты между двумя датами scala - PullRequest
2 голосов
/ 07 апреля 2020

Я пытаюсь извлечь даты между двумя датами.

Если мой ввод: дата начала: 2020_04_02 дата окончания: 2020_06_02

Вывод должен быть - Список ("2020_04_02", "2020_04_03 "," 2020_04_04 "," 2020_04_05 "," 2020_04_06 ")

До сих пор я пробовал:

   val beginDate = LocalDate.parse(startDate, formatter)
   val lastDate = LocalDate.parse(endDate, formatter)
   beginDate.datesUntil(lastDate.plusDays(1)).iterator().asScala.map(date => formatter.format(date)).toList


 import java.time.format.DateTimeFormatter
 private def formatter = DateTimeFormatter.ofPattern("yyyy_MM_dd")

Но я думаю, что это можно сделать даже более изощренным способом

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

То, что вы делаете, правильно, но ваша дата окончания не соответствует ожидаемой:


    import java.time.format.DateTimeFormatter
    import java.time.LocalDate
    import scala.jdk.CollectionConverters._

    private def formatter = DateTimeFormatter.ofPattern("yyyy_MM_dd")
    val startDate = "2020_04_02"
    val endDate1 = "2020_04_06" // "2020_06_02"
    val endDate2 = "2020_06_02"
    val beginDate = LocalDate.parse(startDate, formatter)
    val lastDate1 = LocalDate.parse(endDate1, formatter)
    val lastDate2 = LocalDate.parse(endDate2, formatter)
    val res1 =  beginDate.datesUntil(lastDate1.plusDays(1)).iterator().asScala.map(date => formatter.format(date)).toList
    val res2 =  beginDate.datesUntil(lastDate2.plusDays(1)).iterator().asScala.map(date => formatter.format(date)).toList

    println(res1) // List(2020_04_02, 2020_04_03, 2020_04_04, 2020_04_05, 2020_04_06)
    println(res2) // List(2020_04_02, 2020_04_03, 2020_04_04, 2020_04_05, 2020_04_06 ... 2020_05_31, 2020_06_01, 2020_06_02)


0 голосов
/ 08 апреля 2020

Эта функция возвращает список [String].

import java.time.format.DateTimeFormatter
import java.time.LocalDate

  val dt1 = "2020_04_02"
  val dt2 = "2020_04_06"

  def DatesBetween(startDate: String,endDate: String) : List[String] = {
    def ConvertToFormat = DateTimeFormatter.ofPattern("yyyy_MM_dd")
    val sdate = LocalDate.parse(startDate,ConvertToFormat)
    val edate = LocalDate.parse(endDate,ConvertToFormat)
    val DateRange = sdate.toEpochDay.until(edate.plusDays(1).toEpochDay).map(LocalDate.ofEpochDay).toList
    val ListofDateRange = DateRange.map(date => ConvertToFormat.format(date)).toList
    ListofDateRange
  }

  println(DatesBetween(dt1,dt2))
...