Search code examples
swiftnsdateformatterfoundation

Convert time string to Unix time date of the same day


how to convert a string hour to millisecond of the day?

for exemple:

let strDate = "06:00 PM"

Or:

let strDate = "09:00 AM"

my code:

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

for example my string is: 06:00 PM, so I want to have the date in millisecond of today Thursday 20 September 2018 at 06:00 PM


Solution

  • You can set your DateFormatter default date to startOfDay for today, set the formatter locale locale to "en_US_POSIX" when parsing your time then you can simply get your resulting date timeIntervalSince1970 and multiply by 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
    }