Ios NSCalendar.dateFromComponents返回错误的时间

Ios NSCalendar.dateFromComponents返回错误的时间,ios,swift,nsdate,nscalendar,Ios,Swift,Nsdate,Nscalendar,我试图在我的应用程序的用户默认值中存储和检索特定的时间(因为它的重复事件日期没有相关性并且被忽略),但我遇到了一个奇怪的问题,时间是正确的,但分和秒不是 这是我的密码 var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar) var flags: NSCalendarUnit = .MinuteCalendarUnit | .HourCalendarUnit | .SecondCalendarUnit var compo

我试图在我的应用程序的用户默认值中存储和检索特定的时间(因为它的重复事件日期没有相关性并且被忽略),但我遇到了一个奇怪的问题,时间是正确的,但分和秒不是

这是我的密码

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
但是,使用dateFromComponents时会发生这种情况

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

我甚至不明白40和04是从哪里来的

你可以通过正确设置时区来解决问题。 例如:

calendar?.timeZone = NSTimeZone(abbreviation: "GMT")!

哇,我不知道这和它有什么关系(据我所知,时区只轮班时间),但它是有效的。谢谢
calendar?.timeZone = NSTimeZone(abbreviation: "GMT")!