如何使用scala生成器生成范围日期?

时间:2016-01-27 13:00:56

标签: java scala scalatest scalacheck

我正在使用scalacheck,因此我将能够使用Generators。

所以在我的生成器类中,我有类似的东西:

invType <- Gen.oneOf(Seq("Communication", "Restaurants", "Parking"))
invoiceNumber <- Gen.choose(1, 10000)

但现在我要生成:

 invoiceDate = "1/1/2014" //todo: generate random date between 2013 - today

我该怎么做? TNX

1 个答案:

答案 0 :(得分:4)

如果您可以生成完整的日期范围,那么您应该可以使用Gen.oneOf随机选择该范围内的日期。您可以使用以下代码生成范围:

  val sf = new SimpleDateFormat("M/d/yyyy")
  val now = new Date
  val cal = Calendar.getInstance()
  cal.set(2013, 0, 1) //Jan 1 2013

  val dates = 
    Iterator.
      continually{
        val d = cal.getTime
        cal.add(Calendar.DAY_OF_YEAR, 1)
        sf.format(d)
      }.
      takeWhile(_ => cal.getTimeInMillis() <= now.getTime).
      toSeq

然后从那里你应该能够做到:

invDate <- Gen.oneOf(dates)