尽管使用java日期库存在一些缺点,例如缺少t hread安全(Why is Java's SimpleDateFormat not thread-safe?)和难用的API,你可以使用implicits使事情多一点可口:
implicit def stringToDate(date: String) = new {
def parse(implicit format: String) = parse0(date)(format)
private def parse0(date: String)(implicit format: String) = {
val sdf = new SimpleDateFormat(format)
sdf.setLenient(false)
sdf.parse(date)
}
def isValid(implicit format: String) = try { parse0(date)(format); true } catch { case _ => false }
def beforeNow(implicit format: String) = parse0(date)(format) before new Date()
def afterNow(implicit format: String) = parse0(date)(format) after new Date()
}
然后,你可以使用这样的:
implicit val format = "yyyy-MM-dd"
"2012-12-02" isValid // true
"2012-12-02" beforeNow // ?
"2012-12-25" afterNow // ?
或者,你可以使用scala-time:
import org.joda.time.format.ISODateTimeFormat._
import org.joda.time.DateTime
for(date <- date.parseOption("2012-12-02")) yield date < new DateTime // Option(?)
通过这种方法,你会得到一个斯卡拉友好的界面,和你没有创建和解析一个新的SimpleDateFormat对象或将其存储在希望避免线程问题。
我不是一个斯卡拉专家,但也许[斯达拉时间的Joda时间包装]](https://github.com/jorgeortiz85/scala-time)可以为你工作。 .. –