繁体   English   中英

如何将此字符串转换为这种格式的日期?

[英]How to convert this string in a date with this format?

我使用一个 API,当我要求一个日期时,这个 API 得到我这样的String

20190717-0300

我想以这种格式在UILabel显示该日期: "dd '\\(preposition)' MMMM"

我的尝试是进行字符串扩展:

extension String {
 var toDate: String? {
        let dateFormatter = DateFormatter()
        let preposition = NSLocalizedString("of", comment: "Preposition of dates formatted")
        dateFormatter.dateFormat = "dd '\(preposition)' MMMM"
        dateFormatter.locale = Locale.current

        if let date = dateFormatter.date(from: self) {
            let dateString = dateFormatter.string(from: date)
            return dateString
        }

        return nil
    }
}

然后使用它:

myLabel.text = thatString.toDate

但是.toDate总是返回nil

注意:我在网站上找到的答案是 ISO 格式字符串的情况。

预期结果:

7 月 17 日

基本上你需要一个输入日期格式和一个输出日期格式。

extension String {
    var toDate: String? {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyyMMddZ"

        if let date = dateFormatter.date(from: self) {
            let preposition = NSLocalizedString("of", comment: "Preposition of dates formatted")
            dateFormatter.dateFormat = "dd '\(preposition)' MMMM"
            let dateString = dateFormatter.string(from: date)
            return dateString
        }

        return nil
    }
}

我完全同意 rmaddy 使用setLocalizedDateFormatFromTemplate的评论

日期字段符号的来源是unicode.org:日期格式模式

如果你喜欢,把它变成扩展:

// function
func formatDate(_ from:String, preposition:String) -> String? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyyMMddZ"
    guard let date = dateFormatter.date(from: from) else {
        return nil
    }
    dateFormatter.dateFormat = "dd '\(preposition)' MMMM"
    return dateFormatter.string(from: date)
}

// example usage
let str = "20190717-0300"
if let formatted = formatDate(str, preposition: "of") {
    print(formatted)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM