日期转换

时间:2011-03-21 12:50:19

标签: scala date

我有一个日期变量

var date: Date = new Date()

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

var dateStr = date.toString()

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

1:

   var stringToDate: Date = date2Str.asInstanceOf[Date]

和2:

stringToDate: Date = new SimpleDateFormat("dd.MM.yyyy").parse(dateStr);

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

java.lang.ClassCastException:
java.lang.String cannot be cast to java.util.Date

4 个答案:

答案 0 :(得分:50)

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

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

答案 1 :(得分:3)

你的第一次尝试应该给你一个ClassCastException,因为你不能将.astring转换为Date。第二次尝试似乎没有使用Date.toString()打印的正确格式。 java.utility.Date的toString方法以javadoc中指定的格式返回一个String。

答案 2 :(得分:3)

使用nscala-time以下为我工作:

import com.github.nscala_time.time._
import com.github.nscala_time.time.Imports._

val ysterday= (DateTime.now- 1.days).toString(StaticDateTimeFormat.forPattern("yyyyMMdd"))

答案 3 :(得分:3)

Scala 2.11开始,以Java 8为目标,可以使用java.time日期时间API:

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

请注意:

  • 这是标准库的一部分(不需要第三方依赖性)
  • 这是meant to replace的旧java.util.Date / SimpleDateFormat API。
  • 这也是supposed to replace个广泛使用的joda-time库:

      

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

  • 并通过关联nscala-time来封装joda-time