【问题标题】:NSDate timeIntervalSince1970 not working in Swift? [duplicate]NSDate timeIntervalSince1970 在 Swift 中不起作用? [复制]
【发布时间】:2015-07-18 12:10:25
【问题描述】:

我正在快速执行此操作:

let date = NSDate(timeIntervalSince1970: 1432233446145.0)
println("date is \(date)")

日志给了我这个:

 date is 47355-09-02 23:55:45 +0000

然后我尝试返回一个间隔来进行测试:

let tI = expirationDate.timeIntervalSinceDate(date)
println("tI = \(tI)")

我明白了:

tI = 0.0

我做错了什么? 我似乎可以使 timeIntervalSince1970 调用正常工作。在 Swift 中是否有任何已知的问题,或者我在这里遗漏了什么?

【问题讨论】:

  • 你到底期待什么输出?
  • 过期日期是什么?

标签: swift nsdate


【解决方案1】:

1432233446145 很可能是以毫秒为单位给出的时间间隔:

let date = NSDate(timeIntervalSince1970: 1432233446145.0/1000.0)
print("date is \(date)")
// date is 2015-05-21 18:37:26 +0000

Swift 3 及更高版本:

let date = Date(timeIntervalSince1970: 1432233446145.0/1000.0)

【讨论】:

  • 时间间隔错误。它以毫秒为单位,所以除以 1000.0 就可以了。简单的修复,感谢您了解。
【解决方案2】:

我认为您的时间戳不正确。这将导致您的日期为 47355 年 9 月 2 日。

如果我使用以下内容,我会得到(大约)现在的日期:

let date = NSDate(timeIntervalSince1970: 1431024488)
println("date is \(date)")
// "date is 2015-05-07 18:48:08 +0000"

打印的日期不是本地化的时间戳,所以我想你必须自己做一些本地化。一个例子:

let formatter = NSDateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
println("formatted date is \(formatter.stringFromDate(date))")
// "formatted date is 07-05-2015 20:48:08"

为了完整起见,我还检查了一个比初始 date 大 1100 秒的过期日期:

let expirationDate = NSDate(timeIntervalSince1970: 1431025588)
let diff = expirationDate.timeIntervalSinceDate(date)
println("expires in: \(diff)")
// "expires in: 1100.0"

所以,timeIntervalSince1970 似乎工作正常,我认为你的间隔不是你想要的。

【讨论】:

    【解决方案3】:

    从你的代码和日志内容如下:

    date.isEqual(expirationDate)
    

    --> 你的东西刚刚过期:-)。

    【讨论】:

    • 时间间隔为零。
    • 你怎么知道,你不知道过期日期是什么
    • 检查结果为 0.0 显示它。没关系,你没有得到我的讽刺。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多