我有一个API,它接受一个日期作为字符串作为查询参数。在大多数情况下,我希望我的用户以“yyyyMMdd”的格式发送可选的日期参数,因此2013年10月12日的示例为2013/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提供帮助以解决所有日期/时间类型问题。
答案 0 :(得分:1)
您需要选项和地图:
val gdate:Option[String] = params.get("gamedate")
val date:Option[DateTime] = gdate map { MyDateTimeHelper.parseDate _ }
val dateOrDefault:DateTime = date.getOrElse(new DateTime)
答案 1 :(得分:0)
您还可以使用util.Try
,IMO更具可读性。
这是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?
}