我需要像这样的日期2020-03-18T00:00:00
转换此字符串2020.03.18 00:00
当我尝试这样转换时,我的应用程序崩溃了。
public extension String {
var dateValue: Date {
let formatter = DateFormatter()
formatter.timeZone = .none
formatter.dateFormat = "yyyy-MM-dd HH:mm"
return formatter.date(from: self)!
}
}
有什么想法吗?
您的日期格式化程序需要包含“ T”
dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'"
您需要一个格式化程序才能将2020-03-18T00:00:00
的ISO8601格式转换为Date
对象。然后,如果您想要2020.03.18 00:00
格式的字符串,则可以使用单独的格式化程序。例如:
let iso8601Formatter = DateFormatter()
iso8601Formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
iso8601Formatter.locale = Locale(identifier: "en_US_POSIX")
let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy.MM.dd HH:mm"
func convert(input: String) -> String? {
guard let date = iso8601Formatter.date(from: input) else { return nil }
return formatter.string(from: date)
}
let result = convert(input: "2020-03-18T00:00:00") // "2020.03.18 00:00"
[注意,如果您要进行大量转换,则可能不希望将这些格式化程序的实例掩埋在函数中,但请确保实例化它们一次。格式化程序的实例化(和dateFormat
字符串的更改)是一个众所周知的计算密集型过程,这就是为什么我将它们设置为属性而不是局部变量的原因。