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