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