Преобразовать строку времени в дату времени Unix того же дня - PullRequest
0 голосов
/ 20 сентября 2018

как преобразовать строковый час в миллисекунду дня?

для примера:

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)

например, моя строка: 18:00, поэтому я хочу, чтобы дата в миллисекундах сегодняшнего четверга, 20 сентября 2018 г., в 18:00

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы можете установить дату по умолчанию для 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
}
0 голосов
/ 20 сентября 2018

Сначала необходимо проанализировать строку даты:

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)

После этого получите интервал времени междуdate и start:

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