swift - 从 NSUserDefaults (Swift) 中的 double 值中检索日期

标签 swift nsdate nsuserdefaults nsdateformatter

您好,我正在创建一个具有两个控件的控件:一个 NSSlider 和一个不断更新的 NSTextField。我向 NSTextField 添加了一个 NSDateFormatter,以便它显示格式化为时间的 slider 的当前值。 slider 的范围为 0 到 86,400 个单位(以便用户在 24 小时的范围内滑动秒数)。

我将我的应用程序连接到共享用户默认 Controller ,以便为用户存储值。

应用程序在 NSTextField 中显示正确的时间,但它始终以秒为单位存储值。例如,如果用户在移动 slider 时选择了 06:32:14,则系统实际上会将 23534.2261709793 存储在 startTime

键中

当用户再次打开应用时,他们将看到预期的 06:32:14。

我的问题是当我想读取代码中的变量时:

我可以将值读取为 Double:

let value = NSUserDefaults.standardUserDefaults().objectForKey("startTimeValue") as? Double

这工作正常,如果我尝试将其转换为 NSDate,它将无法工作(值将设置为 nil)。所以我认为在代码中使用 NSDateFormatter 是可行的(因为这是界面构建器为用户查看日期所做的工作的方式):

 let dateFormatter = NSDateFormatter()
 dateFormatter.dateStyle = NSDateFormatterStyle.NoStyle
 dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
 let date = dateFormatter.dateFromString((value?.description)!)

在前面的代码中,我创建了日期格式化程序,然后将日期样式设置为空(我只想做时间),并将时间样式设置为较短。但是给出 value.description ("23534.2261709793") 仍然不行。日期仍然为零。

我做错了什么吗?

最佳答案

您从 NSUserDefaults 存储/获取的 double 值是从 1970 年 1 月 1 日星期四开始的时间间隔。因此您需要将该时间间隔提供给 NSDate 构造函数,以便它可以为您构造日期。

let value = NSUserDefaults.standardUserDefaults().objectForKey("startTimeValue") as? Double
let date = NSDate(timeIntervalSince1970: value)

关于swift - 从 NSUserDefaults (Swift) 中的 double 值中检索日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100546/

相关文章:

swift - 串行链接 do-try-catch 控制流的正确模式是什么?

ios - Spritekit 动画没有改变

objective-c - 使用两个 NSDate 计算一个人的年龄

ios - 在 UIDatePicker ios 中设置默认初始时间

iOS 和 xcode : how long of a string can be stored in NSUserDefault?

ios - 如何从 Swift 中的字典中获取特定索引处的键?

arrays - 在 Swift 3 中过滤 "2D"自定义对象数组

objective-c - 如果是没有 AM/PM 的 12 小时格式,有什么方法可以识别时间?

iphone - 在 NSUserDefaults 中存储值是否有任何限制?

ios - 在 NSUserdefault swift 中存储结构