我正在使用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日
答案 0 :(得分:1)
基本上,您需要一个 input 日期格式和一个 output 日期格式。
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: Date Format Patterns
答案 1 :(得分:0)
如果愿意,可以将其扩展为
// 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)
}