在Swift中获取Unix时代时间


102

您如何从Swift中的纪元获得秒数?


2
与Objective-C相同-使用NSDate。
gnasher729 2014年

2
我避免开发Apple产品,因为我讨厌Objective-C。因此,我还没学会。而且我知道Swift语法至少有点不同。请告诉我语法。获得一些轻松的SO名声。
克里斯·雷德福


3
不,它直接链接到Swift方法的条目:- timeIntervalSince1970
zaph

3
实际上,我链接到了特定的方法:)
Martin R

Answers:


162

您可以简单地使用NSDate的timeIntervalSince1970功能。

let timeInterval = NSDate().timeIntervalSince1970

7
请注意,这需要导入Foundation。
AlBlue 2014年

3
不使用Foundation怎么办?
marius

3
如果您不想使用基础,则可以使用AFNetworking / AlamoFire(github.com/Alamofire/Alamofire)加载currentmillis.com,然后解析页面的html。请注意,您必须考虑网络延迟并检查连接性。我决定只使用Foundation ...
Chase Roberts

2
作为一个整数怎么样?
rstackhouse

82

对于Swift 3.0

Date().timeIntervalSince1970


49
UNIX时间格式以毫秒为单位。So Int(Date()。timeIntervalSince1970 * 1000)
CHiP-love-NY

9
@ CHiP-love-NY:事实并非如此。Unix时间是自1970年1月1日(UTC)以来的秒数
马丁R

1
它返回一个TimeInterval所,这是secods
丹尼尔

1

您可以使用以下方法获得

Int(Date().timeIntervalSince1970)

这是当前日期,如果要获取给定日期

Int(myDate.timeIntervalSince1970)

如果要从UNIX时间时代转换回Swift日期时间,可以使用以下命令

let date = Date(timeIntervalSince1970: unixtEpochTime)

0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

Swift timeIntervalSince1970返回的秒数具有所谓的“毫秒级”精度,据我观察,该精度通常为微秒,但有时会少一些或多一种标度(小数点后一位)。当它返回5的小数位数(小数点后5位)时,我不知道Swift是丢弃尾随的0还是不能产生6的小数位数。但是,当返回的小数位数为7时,多余的数字可能会被截断,因为它的精度超出了微秒。因此,对于一致且精确的真值:

let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise

但是不幸的是,在2038年,32位数字将不能用于Unix时间戳,而必须是64位。

let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000

扩展名:

extension Date {
    var unixTimestamp: Int64 {
        return Int64(self.timeIntervalSince1970 * 1_000)
    }
}

Date().unixTimestamp

0

如果您不想导入Foundation,即用于Linux等,则可以使用CoreFoundation中的以下内容:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

您知道什么时候约会和朋友会跨平台吗?
佐尔坦·马托克(ZoltánMatók)

@ZoltánMatók我听说他们有计划在公开场合重新实现Foundation的更多功能。有关更多信息,请访问forums.swift.org。
rshev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.