Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将日期从一种格式解析为另一种格式_Scala_Date_Parsing_Localdate - Fatal编程技术网

Scala 将日期从一种格式解析为另一种格式

Scala 将日期从一种格式解析为另一种格式,scala,date,parsing,localdate,Scala,Date,Parsing,Localdate,我有一个初始日期作为字符串,我需要将其转换为具有特定格式的日期。我试图在字符串中定义日期格式并对其进行解析,然后将其格式化为所需的格式。问题是我需要一个日期作为最终结果。 以下是我使用的代码: def parseDateToOriginal(date: String): String = { val initialDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy") val finalDateFor

我有一个初始日期作为字符串,我需要将其转换为具有特定格式的日期。我试图在字符串中定义日期格式并对其进行解析,然后将其格式化为所需的格式。问题是我需要一个日期作为最终结果。 以下是我使用的代码:

  def parseDateToOriginal(date: String): String = {
    val initialDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy")
    val finalDateFormat = new SimpleDateFormat("yyyy-mm-dd")

    val result = finalDateFormat.format(initialDateFormat.parse(date))
    result
  }
所以我需要Date作为这个方法的返回类型。我试图解析结果字符串以获得正确的日期,但由于某些原因,结果默认返回原始日期格式。我如何解决这个问题

下面是我如何再次尝试解析它:

val parsedDate = new SimpleDateFormat("yyyy-mm-dd").parse(parseDateToOriginal(date))

结果是模式“EEE-MMM-dd-hh:mm:ss-zzz-yyyy”首先,
SimpleDate
是旧的和过时的。建议使用当前的
java.time

接下来,如果需要返回
日期
,则解析输入并返回
日期
。只有在显示日期时,才需要格式化日期,即将其更改为字符串

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

def parseToDate(date: String): LocalDate = 
  LocalDate.parse(date
                 ,DateTimeFormatter.ofPattern("EEE MMM dd hh:mm:ss zzz yyyy"))
试一试

哪个输出

parseDateToOriginal("Thu Jun 18 20:56:02 EDT 2009") // res2: String = 2009-06-18

请注意,
finalDateFormat

val finalDateFormat = new SimpleDateFormat("yyyy-mm-dd")

您在月份位置使用小写的
mm
,但应该是大写的
mm
。小写的
mm
表示分钟,因此它会错误地将
res2:String=2009-56-18
作为输出。

可能重复的您正在询问不可能的问题。
日期
不能有格式。另外,我建议您不要使用
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。而是使用
ZonedDateTime
DateTimeFormatter
,两者都来自。而且使用
zzz
进行解析本身是不安全的,因为时区缩写是不明确的(我认为通常是不明确的)。提问者在另一种格式模式中错误地使用了小写字母
hh
。您已经在代码中更正了它。
val finalDateFormat = new SimpleDateFormat("yyyy-mm-dd")