我正在尝试将日期字符串从yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
转换为“day,date month year”,类似于“2018年1月1日星期一”。
我正在使用我的帮助函数,它将日期字符串从一种格式转换为另一种格式。在下面的函数中,我不确定需要为to
传递什么参数:
func convertDate(from inputFormat: String, to outputFormat: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = inputFormat
if let dateInLocal = dateFormatter.date(from: self) {
dateFormatter.dateFormat = outputFormat
dateFormatter.amSymbol = "AM"
dateFormatter.pmSymbol = "PM"
return dateFormatter.string(from: dateInLocal)
}
return "NA"
}
使用上面的扩展如下
dateAndName = date.convertDate(from:"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", to: "")
有关日期格式,请参阅文档。
EEEE
给出了完整的工作日名称。 MMMM
给出了完整的月份名称。 dd
给出了两位数的月份数。 yyyy
给出了一个四位数的年份数字。
不要以输入格式引用Z
。日期字符串中的Z
表示日期字符串的时区。如果以日期格式引用Z
,那么Z
在字符串中基本上被忽略为时区指示符,日期格式化程序将解析日期字符串,就好像它是本地时间并给出错误的结果。
这是你清理过的代码:
func convertDate(from inputFormat: String, to outputFormat: String) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = inputFormat
dateFormatter.local = Locale(identifier: "en_US_POSIX")
if let dateInLocal = dateFormatter.date(from: self) {
dateFormatter.dateFormat = outputFormat
dateFormatter.locale = Locale.current
return dateFormatter.string(from: dateInLocal)
}
return nil
}
dateAndName = date.convertDate(from:"yyyy-MM-dd'T'HH:mm:ss.SSSZ", to: "EEEE, dd MMMM yyyy")
请注意,此函数应返回可选字符串。让调用者决定如何处理无效输入。
另请注意用于解析输入字符串的特殊区域设置。