使用 DateFormatter 格式化字符串日期

format string date using DateFormatter

我正在制作一个函数,将字符串日期(如“2018-05-01 18:23:31”)格式化为日语日期格式的字符串类型,即“2018 年 5 月 1 日”。我做了一个函数,但是当我 运行 它抛出一个错误说

Fatal error: Unexpectedly found nil while unwrapping an Optional value

当我打印输入字符串日期时,它有一个值,但在转换时,我开始收到错误消息。任何人都可以告诉我为什么我在这个函数中得到 nill 吗?

func setTemplate (strDate: String) -> String {
    
    let dateFormatter = DateFormatter()

    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "ydMMM", options: 0, locale: Locale(identifier: "ja_JP"))
    
    print(strDate) // getting this value => "2018-05-01 18:23:31"

    let date = dateFormatter.date(from: strDate)! // getting an error in here
    
    let result = dateFormatter.string(from: date)
    
    return result
}

我想我正试图摆脱字符串中的时间,它以某种方式抛出一个错误,但不确定...

您需要先解析您的字符串,然后才能从结果日期获取本地化字符串:

let strDate = "2018-05-01 18:23:31"
func setTemplate (strDate: String) -> String? {
    let dateFormatter = DateFormatter()
    dateFormatter.locale = .init(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    guard let date = dateFormatter.date(from: strDate) else { return nil }
    let locale = Locale(identifier: "ja_JP")
    dateFormatter.locale = locale
    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "ydMMM", options: 0, locale: locale)
    return dateFormatter.string(from: date)
}
setTemplate(strDate: strDate)  // "2018年5月1日"