首页 > 解决方案 > Swift - 使用日期格式化程序将日期的短格式字符串转换为长格式

问题描述

我有一个看起来像这样的字符串:“2021-08-05”

我想将其转换为日期,以便将其显示为“2021 年 8 月 5 日”

我下面的代码只是返回为零,我不明白为什么。任何帮助,将不胜感激。

代码:


func stringToDate(dateString: String){
  let formatter = DateFormatter()

  formatter.locale = Locale(identifier: "en_US_POSIX")
  formatter.dateFormat = "yyyy-MM-dd"
  formatter.dateStyle = .long
        
  let newDate = formatter.date(from: dateString)

  print("formatter: \(newDate)")
}

我将该函数称为按钮的操作 (SwiftUI),因此单击按钮时应显示日期。

Button("Go"){
 stringToDate(dateString: "2021-08-05")
}

标签: swiftdatensdateformatter

解决方案


删除该dateStyle行将修复它,并打印实际日期。

代码:

func stringToDate(dateString: String){
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "yyyy-MM-dd"

    let newDate = formatter.date(from: dateString)
    print("formatter: \(newDate)")
}

// Prints: formatter: Optional(2021-08-04 23:00:00 +0000)

要进行整个转换,以下功能将起作用:

func convertDate(from original: String) -> String? {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "yyyy-MM-dd"
    guard let date = formatter.date(from: original) else { return nil }
    formatter.dateStyle = .long
    let string = formatter.string(from: date)
    return string
}

// Prints: Optional("August 5, 2021")

当然,由于我的位置和语言,这可能会略有不同

以下代码行只能在获得 a运行,Date否则您将“覆盖” dateFormat

formatter.dateStyle = .long

推荐阅读