儘管使用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)可以爲你工作。 .. –