0

我有一个接受日期作为字符串作为查询参数的 API。在大多数情况下,我希望我的用户以“yyyyMMdd”的格式发送一个可选的日期参数,所以一个例子是2013/10/122013 年 10 月 12 日。然后我在 MongoDB 中搜索记录和/或缓存某些匹配的数据说日期。我拥有的将字符串转换为 Scala 中正常的代码的代码如下:

def parseDate(date: String): org.joda.time.DateTime = {
    val formatter = DateTimeFormat.forPattern("yyyyMMdd")  
    formatter.parseDateTime(date)
}

这很好用。现在我遇到的问题是当用户没有提交日期时,我想默认为今天的日期。这是我需要帮助的地方。我没有一个很好的方法将它变成一个字符串来传递给这个方法。我的代码如下所示:

val gdate = params.getOrElse("gamedate", "0")
val date = gdate match {
   case gd:String => MyDateTimeHelper.parseDate(gd)
}

这显然是错误的。我想我也许可以这样做:

val gdate = params.getOrElse("gamedate", new DateTime)

但这也不是一个解决方案(我假设它只是绕过匹配,因为它已经是 Date 实例而不是字符串。

在 Scala 中解决这个问题的好方法是什么?我只是 Scala 的 jodatime 来帮助我解决所有日期/时间类型的问题。

4

2 回答 2

1

你想要选项和地图:

val gdate:Option[String] = params.get("gamedate")
val date:Option[DateTime] = gdate map { MyDateTimeHelper.parseDate _ }
val dateOrDefault:DateTime = date.getOrElse(new DateTime)
于 2013-11-06T19:09:38.037 回答
0

您也可以使用util.TryIMO 更具可读性。

Try相当于 pedrofurla 的答案。

val gdate:Try[String] = params.get("gamedate")
val date:Try[DateTime] = gdate map { MyDateTimeHelper.parseDate _ }
val dateOrDefault:DateTime = date match {
  case Success(d) => d
  case Failure(e) => new DateTime   // also print out the exception?
}
于 2014-06-11T18:07:16.327 回答