Hai*_*ezu 4 nsdate nscalendar ios swift
我正在尝试在我的应用程序的用户默认值中存储和检索特定时间(因为它的重复事件日期没有相关性而被忽略),但我有这个奇怪的问题,其中小时是正确的但是分钟和秒不是
这是我的代码
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!)
Run Code Online (Sandbox Code Playgroud)
组件正确地输出时间
Components: <NSDateComponents: 0x17414a7c0>
Hour: 8
Minute: 30
Second: 0
Run Code Online (Sandbox Code Playgroud)
并且从用户默认值中正确检索日期
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)
Run Code Online (Sandbox Code Playgroud)
但是,使用dateFromComponents时会发生这种情况
Date 3: 0001-01-01 07:40:04 +0000
Run Code Online (Sandbox Code Playgroud)
我甚至不明白40和04来自哪里
您可以通过正确设置时区来解决问题.例如 :
calendar?.timeZone = NSTimeZone(abbreviation: "GMT")!
Run Code Online (Sandbox Code Playgroud)