将时间字符串转换为同一天的 Unix 时间日期

Convert time string to Unix time date of the same day

如何将字符串小时转换为一天中的毫秒?

例如:

let strDate = "06:00 PM"

或者:

let strDate = "09:00 AM"

我的代码:

let dateString = "06:00 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
guard let date = dateFormatter.date(from: dateString)
else { fatalError() }
print(date)

例如我的字符串是:06:00 PM,所以我想以毫秒为单位的日期是今天 2018 年 9 月 20 日星期四 06:00 PM

首先,您需要解析日期字符串:

let dateString = "06:00 PM"
let formatter = DateFormatter()
formatter.defaultDate = Date()
formatter.dateFormat = "hh:mm a"
formatter.locale = Locale(identifier: "en_US_POSIX")
let date = formatter.date(from: dateString)

然后,您需要获取一天的开始时间:

let calendar = Calendar.current
let start = calendar.startOfDay(for: date)

之后,得到datestart之间的时间间隔:

let timeInterval = date.timeIntervalSince(start)
let milliseconds = timeInterval * 1000.0

您可以将 DateFormatter 默认日期设置为今天的 startOfDay,在解析您的时间时将格式化程序区域设置设置为 "en_US_POSIX" 然后您可以简单地获取结果日期 timeIntervalSince1970 并乘以 1000:

let strTime = "06:00 PM"
let formatter = DateFormatter()
formatter.defaultDate = Calendar.current.startOfDay(for: Date())
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "hh:mm a"
if let date = formatter.date(from: strTime) {
    let milliseconds = date.timeIntervalSince1970 * 1000
    print(milliseconds) // 1537477200000
    let date2 = Date(timeIntervalSince1970: milliseconds/1000)
    print(date2.description(with: .current))  // Thursday, September 20, 2018 at 6:00:00 PM Brasilia Standard Time
}