2017-02-13 6 views
0

異なる日付形式を使用して文字列を解析する、スケーラでエレガントで機能的な方法は何ですか?Scala:別の日付形式を試す

のは、私が

val formats = Set(
    new SimpleDateFormat("YYYY-MM-dd"), 
    new SimpleDateFormat("MM/DD/YYYY") 
) 

を持っていると私が正常に解析するこれらの形式の最初を使用して文字列を解析してみたいとしましょう:

def parse(s:String): Option[Date] = { 
    formats.map {??????????????} 
} 
+0

さまざまな形式の正規表現を作成し、それらの正規表現にマッチさせることができます。こちらをご覧ください:http://www.scala-lang.org/api/2.12.1/scala/util/matching/Regex.html – marstran

答えて

1

あなたがストリームにリストを変換することができます(最小限の解析試行回数が行われるように)、TrycollectFirstを使用します。

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 
+0

素晴らしい!ありがとうございました! –

+0

'.view'はストリームを作成するより良い代替手段ではないでしょうか? –

+1

ああ - 最も間違いなく! –