2015-01-28 3 views
4

Я пытаюсь сохранить и получить определенное время в пользовательских значениях по умолчанию для моего приложения (так как это повторяющиеся даты событий не имеет значения и игнорируется), но у меня есть эта странная проблема, где час правильно, но минуты и секунды неNSCalendar.dateFromComponents возвращает неправильное время

Вот мой код

var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar) 
var flags: NSCalendarUnit = .MinuteCalendarUnit | .HourCalendarUnit | .SecondCalendarUnit 
var components = calendar?.components(flags, fromDate: NSUserDefaults.standardUserDefaults().valueForKey("breakfastTime") as NSDate!) 
let test = calendar?.dateFromComponents(components!) as NSDate! 
NSLog("Components: %@", components!) 
NSLog("Date 1: %@", NSUserDefaults.standardUserDefaults().valueForKey("breakfastTime") as NSDate) 
NSLog("Date 3: %@", test!) 

компоненты правильно выводит время, как таковой

Components: <NSDateComponents: 0x17414a7c0> 
Hour: 8 
Minute: 30 
Second: 0 

и дата с orrectly извлекаются из значения по умолчанию пользователя

Date 1: 2015-01-28 07:30:00 +0000 
(It's 7 rather than 8 but it makes sense, since it's stored at UTC) 

Однако, это происходит при использовании dateFromComponents

Date 3: 0001-01-01 07:40:04 +0000 

Я даже не понимаю, где 40 и 04 приходят из

+0

Ого, я понятия не имею, как это имеет ничего общего с ним (это было мое понимание того, что TimeZones только сдвиг часов), но это работает. Благодаря! –

ответ

6

Вы можете решить вашу проблему правильная настройка часового пояса. Например:

calendar?.timeZone = NSTimeZone(abbreviation: "GMT")! 
Смежные вопросы