Swift - iOS - 将字符串转换为日期并发布
Swift - iOS - Convert String to Date & issue
我在字符串上有一个扩展,可以将我的日期字符串转换为 Swift 5.2
中的日期类型
extension String {
func toDate(withFormat format: String = "MMM d, YYYY HH:mm:ss a") -> Date {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.timeZone = .current
dateFormatter.dateFormat = format
guard let date = dateFormatter.date(from: self) else {
preconditionFailure("Check the format!!!")
}
return date
}
}
当我尝试转换时,我的 date_string 总是错误的(检查下方):
var sampleDate = "May 5, 2021 1:34:15 AM"
let newDate = sampleDate.toDate()
print(newDate) //prints: "2020-12-28 05:34:15 +0000\n"
我要转换的 date_string 始终采用类似格式:“May 5, 2020 9:20 5:39:15 PM”
知道哪里出了问题吗?我玩了本地,日历,时区但没有用!我现在在美国东海岸时区。
谢谢,
凸轮
你的 DateFormatter 的 dateFormat 应该是 "MMM d, yyyy hh:mm:ss a"
(用“yyyy”代替“YYYY”,用“hh”代替“HH”)
有效。
编辑:
或者像Leo在评论中指出的,"MMM d, yyyy h:mm:ss a"
(With only one h
)会更好,而且使用起来更安全
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
(告诉日期格式化程序不要尝试为不同的本地日期格式约定调整日期格式。)
我在字符串上有一个扩展,可以将我的日期字符串转换为 Swift 5.2
中的日期类型extension String {
func toDate(withFormat format: String = "MMM d, YYYY HH:mm:ss a") -> Date {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.timeZone = .current
dateFormatter.dateFormat = format
guard let date = dateFormatter.date(from: self) else {
preconditionFailure("Check the format!!!")
}
return date
}
}
当我尝试转换时,我的 date_string 总是错误的(检查下方):
var sampleDate = "May 5, 2021 1:34:15 AM"
let newDate = sampleDate.toDate()
print(newDate) //prints: "2020-12-28 05:34:15 +0000\n"
我要转换的 date_string 始终采用类似格式:“May 5, 2020 9:20 5:39:15 PM”
知道哪里出了问题吗?我玩了本地,日历,时区但没有用!我现在在美国东海岸时区。
谢谢, 凸轮
你的 DateFormatter 的 dateFormat 应该是 "MMM d, yyyy hh:mm:ss a"
(用“yyyy”代替“YYYY”,用“hh”代替“HH”)
有效。
编辑:
或者像Leo在评论中指出的,"MMM d, yyyy h:mm:ss a"
(With only one h
)会更好,而且使用起来更安全
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
(告诉日期格式化程序不要尝试为不同的本地日期格式约定调整日期格式。)