Как получить 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)