Scala函数在列表中存在日期时返回True / False

时间:2018-06-13 18:07:34

标签: scala

我正在尝试创建一个函数,我将日期作为字符串传递,并希望检查其前一个日期是否存在于作为第二个参数传递给函数的列表中。如果是,那么它应该返回一个布尔值。

def fn1(date: String, days: Seq[String]): Boolean = {
    ....
    ....

  }

另外,我需要一个类似的函数,它从输入参数的前一天中提取日期,然后在列表中查找它。该函数还返回一个布尔值。

def fn2(date: String, days: Seq[String]): Boolean = {
        ....
        ....

      }

如何在Scala中实现它?

4 个答案:

答案 0 :(得分:3)

你的问题很混乱,令人困惑。我不明白fn1()fn2()之间的区别。

不过,也许这会有所帮助。

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

def fn(date: String, days: Seq[String]): Boolean = {
  val dtFormat = DateTimeFormatter.ofPattern("<expected format here>")

  days.contains(LocalDateTime.parse(date, dtFormat)
                             .minusDays(1)
                             .format(dtFormat))
}

答案 1 :(得分:1)

首先,不要将日期作为字符串传递,请使用java.time.LocalDate

def fn1(date: LocalDate, days: Seq[LocalDate]): Boolean =
  days.contains(date.minusDays(1))

答案 2 :(得分:0)

我认为这个解决方案可以解决您的问题。根据您的日期格式,只需更改split("-")分隔符即可。

    import java.text.SimpleDateFormat
    import java.util.Calendar
    object Driver{

      def getPreviousDate(date:String):String={
        val cal=Calendar.getInstance()
        val dateArr=date.split("-")
        val day=dateArr(0).trim.toInt
        val month=dateArr(1).trim.toInt
        val year=dateArr(2).trim.toInt
        cal.set(Calendar.YEAR, year)
        cal.set(Calendar.MONTH, month-1)
        cal.set(Calendar.DAY_OF_MONTH, day-1)
        val sdf=new SimpleDateFormat("dd-MM-yyyy")
        sdf.format(cal.getTime)
      }

      def fn1(date: String, days: Seq[String]): Boolean = {
       val prevDate=getPreviousDate(date)
       days.contains(prevDate)
      }

      def fn2(date: String, days: Seq[String]): Boolean = {
        val previousDate=getPreviousDate(date)
        val previousDay=previousDate.split("-")(0).trim.toInt
        val daysList=days.map(day=>day.split("-")(0).trim.toInt)
        daysList.contains(previousDay)
      }

      def main(arr:Array[String]) {
       val days=Seq("10-11-2018","11-11-2018","12-11-2018","13-11-2018")
        val date="15-11-2018"
        val status=fn1(date,days)
        println(status)
        val status2=fn1(date,days)
        println(status2)
      }
    }

答案 3 :(得分:0)

这是工作代码,感谢所有人的帮助。

def isHoliday(date: String,
                       days: Seq[String],
                       holidays: List[String]): Boolean = {
    val dtFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd")
    val dayFormat = DateTimeFormatter.ofPattern("EEEE")
    days.contains(LocalDate.parse(date, dtFormat).minusDays(1).format(dayFormat)) ||
      holidays.contains(LocalDate.parse(date, dtFormat).minusDays(1).format(dtFormat))
  }

**需要将字符串日期更改为LocalDate。