我有两个字符串,日期和时间。日期字符串的日期格式为“MM-dd-yyyy”,时间格式为“hh:mm a”,我想从中创建一个10位数的时间戳。我做了以下但是我遇到了这个问题。任何帮助表示赞赏。
let idate = (userInstance.userData?.Date!)! + "T" + (userInstance.userData?.Time!)! + "+0000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from: idate)!
print(date)
let timestamp = Int(date.timeIntervalSince1970)
print(timestamp)
您无法强制将包含AM / PM时间的日期强制为ISO 8601. ISO 8601日期始终以24小时模式表示。 除了您的年,月,日订单不符合ISO 8601标准。
指定适当的日期格式MM-dd-yyyyhh:mm aZ
let datePart = "09-18-2018"
let timePart = "4:22 pm"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM-dd-yyyyhh:mm aZ"
let date = dateFormatter.date(from: datePart + timePart + "+0000")!
let timestamp = Int(date.timeIntervalSince1970)
print(timestamp)
你在这里崩溃:
let date = dateFormatter.date(from: idate)!
那是因为你声称idate
是这种格式的字符串:
"yyyy-MM-dd'T'HH:mm:ssZ"
但事实并非如此。从字符串转换为日期时,格式字符串必须与字符串的格式完全匹配。
然后,您可以提供不同的格式并将日期转换为新字符串。