如何在Swift中获取18位数字的当前时间戳?

24

我想要获取当前时间戳,像这样:

636110767775716756​

然而,当我这样做时:

NSDate().timeIntervalSince1970

它返回一个类似于这样的值:

1475491615.71278

我该如何以我想要的格式访问当前时间戳?我从 这里 检查日期:


你需要的是当前日期和时间的字符串吗? - vaibhav
是的,我需要它作为字符串,以18位数字格式。 - The Cook
那个时间戳的起源/形式是什么?问题在于 timeIntervalSince1970 的最高位数字目前是 1,这与您要查找的内容不太匹配。 - Anya Shenanigans
这就是我在 Swift 中正在寻找的。 - The Cook
3个回答

28

你似乎在寻找C#中的 DateTime.Ticks 是什么,即自0001-01-01以来以100纳秒间隔测量的时间。

你提供的链接中的代码 Swift: convert NSDate to c# ticks 可以很容易地转换为Swift:

// Swift 2:
extension NSDate {
    var ticks: UInt64 {
        return UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
    }
}

// Swift 3:
extension Date {
    var ticks: UInt64 {
        return UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
    }
}

示例(Swift 3):

let ticks = Date().ticks
print(ticks) // 636110903202288256

或者作为一个字符串:

let sticks = String(Date().ticks)
print(sticks)

同时,反向将ticks转换为Date的方法如下:

// Swift 2:
extension NSDate {
    convenience init(ticks: UInt64) {
        self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
    }
}

// Swift 3:
extension Date {
    init(ticks: UInt64) {
        self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
    }
}

示例(Swift 3):

let date = Date(ticks: 636110903202288256)

1
这个很不错。我在NSDate上使用它,而不是Date。 - The Cook

19

这里有一个我认为非常优雅的解决方法。我扩展了NSDate(虽然在Swift 3中现在变成了Date),并添加了一个toMillis()函数,它将给出您正在使用的日期对象的Int64值。

extension Date {
    func toMillis() -> Int64! {
        return Int64(self.timeIntervalSince1970 * 1000)
    }
}

使用方法:

let currentTimeStamp = Date().toMillis()

干杯


谢谢回复,但是它只返回一个13位数字时间戳,像这样:1475492283055。我需要18位。 - The Cook

12

在 Swift 中:

如果您想将其作为全局变量,请参阅下面的代码:

var Timestamp: String {
   return "\(NSDate().timeIntervalSince1970 * 1000)"
}

那么,您可以称之为

println("Timestamp: \(Timestamp)")

*1000是毫秒,如果您愿意,可以将其去除。如果保留它,则为NSTimeInterval。

var Timestamp: NSTimeInterval {
    return NSDate().timeIntervalSince1970 * 1000
}

在 Objective-C 中:

如果您想声明一个符号常量,请参考下面的代码:

#define TimeStamp [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000]

然后像这样调用它:

NSString * timestamp = TimeStamp;

或创建一个全局方法:

- (NSString *) timeStamp {
    return [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
}

注意:1000是用于将时间戳转换为毫秒。如果您更喜欢以秒为单位的时间间隔,则可以删除此部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接