日期转换

Ech*_*cho 33 scala date

我有一个日期变量

var date: Date = new Date()
Run Code Online (Sandbox Code Playgroud)

然后我将这个日期转换为String:

var dateStr = date.toString()
Run Code Online (Sandbox Code Playgroud)

现在我需要将此String转换回日期.我试过了两个:

1:

   var stringToDate: Date = date2Str.asInstanceOf[Date]
Run Code Online (Sandbox Code Playgroud)

和2:

stringToDate: Date = new SimpleDateFormat("dd.MM.yyyy").parse(dateStr);
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下我都收到了错误:

java.lang.ClassCastException:
java.lang.String cannot be cast to java.util.Date
Run Code Online (Sandbox Code Playgroud)

Wil*_*ger 54

我在你的代码中看到了一些问题,但这很好用:

scala> val format = new java.text.SimpleDateFormat("dd-MM-yyyy")
format: java.text.SimpleDateFormat = java.text.SimpleDateFormat@9586200

scala> format.format(new java.util.Date())
res4: java.lang.String = 21-03-2011

scala> format.parse("21-03-2011")
res5: java.util.Date = Mon Mar 21 00:00:00 CET 2011
Run Code Online (Sandbox Code Playgroud)

  • 请注意,DateFormat**不是线程安全**.它可以为您节省一天的调试时间.请看下面答案中的joda包装. (2认同)

Xav*_*hot 6

可以使用Starting Scala 2.11、 Targeting Java 8、 Date Time API:java.time

import java.time.LocalDate
import java.time.format.DateTimeFormatter

val dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy")

LocalDate.now().format(dtf)        // "06-07-2018"
LocalDate.parse("06-07-2018", dtf) // java.time.LocalDate = 2018-07-06
Run Code Online (Sandbox Code Playgroud)

注意:

  • 这是标准库的一部分(不需要第三方依赖项)
  • 这是为了替换旧的java.util.Date/ SimpleDateFormatapi。
  • 这也应该取代广泛使用的joda-time库:

    请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了该项目。

  • 通过关联nscala-time,它是joda-time.