Как получить UTC на свидание в миднигах в swift

Может ли кто-нибудь помочь мне узнать текущее время в формате UTC?
Я стараюсь:

let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let components = cal.components([.Day , .Month, .Year ], fromDate: NSDate())
        let refDate = cal.dateFromComponents(components)

Но я получаю 1/12/2017 23:00:00Это похоже на UTC по местному времени.
Я хочу получить UTC для текущей даты в полночь.

В базе данных я сохраняю дату как количество секунд, но на сервере она сохраняется как 13.01.2017 00:00:00, а в swift я получаю 23.01.2017 23:00:00, поэтому не могу получить значения как они разные, я не понимаю, что мне нужно сделать, чтобы получить тот же UTC.

В базе данных я сохраняю дату как большое количество секунд, которые я получаю быстро UInt64(floor(refDate!.timeIntervalSince1970)) но дата неверна.

1 ответ

Решение

Вам нужно установить hour, minute а также second собственностью NSDateComponents в 0

let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
cal.timeZone = NSTimeZone(name: "UTC")!
let components = cal.components([.Day , .Month, .Year,.Hour, .Minute, .Second], fromDate: NSDate())
components.hour = 0
components.minute = 0
components.second = 0
let refDate = cal.dateFromComponents(components)

Или из iOS 8 вы также можете использовать startOfDayForDate

let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
cal.timeZone = NSTimeZone(name: "UTC")!
let refDate = cal.startOfDayForDate(NSDate())
print(refDate)
Другие вопросы по тегам