2017-07-06 16 views
0

文字列から曜日を取得しようとしているときに、文字列が定義済みの形式に対応していてもエラーが発生することがあります。以下は 日付文字列の解析:正しくフォーマットされた文字列の一部がエラーを返します

val dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 
def getDayOfWeek(date: String): Int = { 
    val stringToParse = date.substring(0, 19) 
    try { 
     val now = Calendar.getInstance() 
     now.setTime(dateFormat.parse(stringToParse)) 
     println("Correct time string: " + stringToParse) 
     now.get(Calendar.DAY_OF_WEEK) 
    } catch { 
     case _: Throwable => println("Wrong time string: " + stringToParse) 
     -1 
    } 
} 

が成功/失敗し、解析された文字列の例です::以下

は、文字列とフォーマット定義を解析するために使用される機能です

Correct time string: 2017-01-01 04:00:00 
Wrong time string: 2017-05-04 15:00:00 
Correct time string: 2017-01-01 04:00:00 
Correct time string: 2017-06-13 07:00:00 
Correct time string: 2017-05-04 15:00:00 
Correct time string: 2017-01-01 04:00:00 
Correct time string: 2017-01-01 04:00:00 
Correct time string: 2017-01-01 04:00:00 
Correct time string: 2017-01-01 04:00:00 
Correct time string: 2017-05-04 15:00:00 
Correct time string: 2017-06-13 07:00:00 
Correct time string: 2017-05-04 15:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-06-13 07:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-06-13 07:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-01-01 05:00:00 
Wrong time string: 2017-06-13 07:00:00 
Correct time string: 2017-01-01 05:00:00 
Correct time string: 2017-05-04 16:00:00 
Correct time string: 2017-05-04 16:00:00 

は、誰もが引き起こす可能性があるものを知っています上記の場合のエラー?成功例と失敗例の間には違いはありません。

ありがとうございます!

+2

おそらく、例外のエラーメッセージを印刷すると、エラーをより具体的に特定するのに役立ちます。 – stefanobaghino

+0

"2017-06-13 07:00:00"と正しく間違って解析しているので、私は@stefanobaghinoしかサポートできません。 – Luftbaum

+0

アドバイスのもう一つの言葉:「Throwable」をキャッチすることは一般的にはお勧めできません。 'NonFatal'エクストラクタを調べたいと思うかもしれません。http://www.scala-lang.org/api/2.11.8/index.html#scala.util.control.NonFatal$ – stefanobaghino

答えて

5

SimpleDateFormatがグローバルに宣言されているという問題があります。

はあなたのライン関数内

val dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 

を持参してください。

SimpleDateFormatはスレッドセーフではありません。非同期コード以外からgetDayoftheweek()関数を呼び出す必要があると仮定します。

関連する問題