字符串问题的时间戳?

问题描述 投票:-2回答:2

我有两个字符串,日期和时间。日期字符串的日期格式为“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)
swift locale unix-timestamp
2个回答
1
投票

您无法强制将包含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)

0
投票

你在这里崩溃:

let date = dateFormatter.date(from: idate)!

那是因为你声称idate是这种格式的字符串:

"yyyy-MM-dd'T'HH:mm:ssZ"

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

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

© www.soinside.com 2019 - 2024. All rights reserved.