使用不同日期格式解析字符串的scala,优雅,实用的方法是什么?
假设我有
val formats = Set(
new SimpleDateFormat("YYYY-MM-dd"),
new SimpleDateFormat("MM/DD/YYYY")
)
我想尝试使用第一种格式解析字符串,这将成功解析:
def parse(s:String): Option[Date] = {
formats.map {??????????????}
}
答案 0 :(得分:1)
您可以将列表转换为Stream(以确保只完成最少数量的解析尝试),然后使用Try
和collectFirst
:
def parse(s:String): Option[Date] = {
formats.toStream.map(f => Try(f.parse(s))).collectFirst {
case Success(d) => d
}
}
println(parse("2017-02-01")) // Some(Sun Jan 01 00:00:00 IST 2017)
println(parse("02/01/2017")) // Some(Sun Jan 01 00:00:00 IST 2017)
println(parse("23:00")) // None