字符串问题的时间戳?

Time stamp from string issue?

我有两个字符串,日期和时间。日期字符串有一个 "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"

但事实并非如此。从字符串转换为日期时,格式字符串必须完全匹配字符串的格式。

然后您可以提供不同的格式并将日期转换为新字符串。