【问题标题】:Parse dates from one format to another将日期从一种格式解析为另一种格式
【发布时间】:2019-11-10 18:59:51
【问题描述】:

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

  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"

【问题讨论】:

  • 你在问不可能的事。 Date 不能有格式。另外我建议你不要使用SimpleDateFormatDate。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APIZonedDateTimeDateTimeFormatter。并且使用zzz 进行解析本质上是不安全的,因为时区缩写是不明确的(我认为经常是这样)。

标签: scala date parsing localdate


【解决方案1】:

首先,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"))

【讨论】:

    【解决方案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 作为输出。

    【讨论】:

    • 很好地发现了mm 错误。提问者还错误地在其他格式模式中得到了小写的hh。您已在代码中更正它。
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多