2017-07-06 59 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

我只能支持@stefanobaghino,因爲你正確解析「2017-06-13 07:00:00」以及錯誤地。 – 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()函數。