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

时间:2019-06-28 21:25:20

标签: scala date parsing localdate

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

  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"

2 个答案:

答案 0 :(得分:4)

首先,SimpleDate很旧而且过时。建议使用当前的java.time库。

接下来,如果您需要返回Date,则解析输入并返回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"))

答案 1 :(得分:2)

尝试

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