【问题标题】:NSCalendar.dateFromComponents returns wrong timeNSCalendar.dateFromComponents 返回错误的时间
【发布时间】:2015-01-28 08:17:36
【问题描述】:

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

这是我的代码

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

并且从用户默认值中正确检索到日期

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 是从哪里来的

【问题讨论】:

  • 哇,我不知道这与它有什么关系(我的理解是时区只改变时间)但它有效。谢谢!

标签: ios swift nsdate nscalendar


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多