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

Parse dates from one format to another

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

  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 作为此方法的 return 类型。我试图解析结果字符串以获得正确的日期,但由于某种原因,结果默认返回原始日期格式。我该如何解决这个问题?

这是我再次尝试解析它的方式:

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

结果是模式 "EEE MMM dd hh:mm:ss zzz yyyy"

首先,SimpleDate 已经过时了。推荐当前java.time

下一步,如果你需要return一个Date然后解析输入和return Date。您只需要在呈现时格式化 Date,即将其更改为 String.

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"))

尝试

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

def parseDateToOriginal(date: String): String = {
  LocalDateTime
    .parse(date, DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss zzz yyyy"))
    .format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
}

输出

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 作为输出。