Swift - 使用日期格式化程序将日期的短格式字符串转换为长格式

Swift - Convert a short format string of a date to long format using date formatter

我有一个如下所示的字符串:“2021-08-05”

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

我下面的代码 returns 为 nil,我不明白为什么。任何帮助将不胜感激。

代码:


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

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

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

下面的代码行 只能 运行 得到 Date 之后 Date 否则你是 'overwriting' dateFormat:

formatter.dateStyle = .long

您正在使用 .dateStyle 设置覆盖 .dateFotrmat 设置。

如果你想这样做,使用格式字符串将字符串转换为日期,然后使用样式输出它。

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)
   
   formatter.dateStyle = .long
   
   print("formatter: \(formatter.string(from: newDate!) )")
}

它给出了你想要的输出: formatter: August 5, 2021