java - 解析日期字符串: some correctly formatted strings return errors

标签 java scala

在尝试从字符串中检索星期几时,尽管字符串符合预定义的格式,但有时会出现错误。

下面是用于解析字符串和格式定义的函数:

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

有谁知道在上述情况下可能导致错误的原因是什么?我没有发现成功/不成功的示例之间有任何差异。

谢谢!

最佳答案

问题是您的 SimpleDateFormat 是全局声明的。

带上你的线路

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

在函数内部。

SimpleDateFormat 不是线程安全的,我假设您必须从外部非同步代码调用 getDayoftheweek() 函数。

关于java - 解析日期字符串: some correctly formatted strings return errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44946795/

相关文章:

java - pyjnius "cannot find class"错误

java - BinarySearch 与 For 循环

java - postgresql jdbc : FATAL: database does not exist

java - hibernate 搜索 : configure Facet for custom FieldBridge

从 OS X 到 Windows 的 Java 编码

scala - 使用 Scala 2.12.0 时激活器 dist 失败

scala - 如何从特征访问参数?

Scala 中的 Java protobuf

sql - Spark Scala : Getting Cumulative Sum (Running Total) Using Analytical Functions

android - 使用 sbt android-plugin 的构建时间长