我想更改字符串日期的格式,以便在字符串中只获取一个月的名称。
我想从“yyyy-MM-dd HH:mm:ss”改为“MMMM”格式
如下面的代码:
func changeFormat(of dateTime: String, fromFormat format1: String = "yyyy-MM-dd HH:mm:ss", toFormat format2: String) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format1
guard let originDate = dateFormatter.date(from: dateTime) else {
return nil
}
dateFormatter.dateFormat = format2
let newFormattedDate = dateFormatter.string(from: originDate)
return newFormattedDate
}
// usage
changeFormat(of "2018-04-12 11:52:12", toFormat : "MMMM")
如果设备中的日期时间格式设置为24小时格式(设置 - >常规 - >日期&时间 - > 24小时时间),则上面的代码将按预期运行,如下所示
但如果我关闭24小时制(激活12小时时间格式),该功能将在此行返回nil
guard let originDate = dateFormatter.date(from: dateTime) else {
return nil
}
我希望该功能在24小时制或12小时制中工作,因此用户无需手动更改其设置。
我该怎么办?
答案 0 :(得分:1)
如果您希望它无论设备的区域设置如何都能正常工作,您需要设置DateFormatter
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = format1
属性
locale
设置dateFormat
之前设置[DisableConcurrentExecution(<timeout>)]
非常重要