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

The*_*ook 18 time timestamp ios swift

我想得到这样的当前时间戳:

636110767775716756?
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

NSDate().timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)

它返回一个这样的值:

1475491615.71278
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 23

您似乎正在寻找DateTime.TicksC#中的内容,即自0001-01-01以100纳秒间隔测量的时间.

您提供的链接Swift中的代码:将NSDate转换为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)
    }
}
Run Code Online (Sandbox Code Playgroud)

示例(Swift 3):

let ticks = Date().ticks
print(ticks) // 636110903202288256
Run Code Online (Sandbox Code Playgroud)

或作为字符串:

let sticks = String(Date().ticks)
print(sticks)
Run Code Online (Sandbox Code Playgroud)

虽然它是在它,但从滴答的反向转换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)
    }
}
Run Code Online (Sandbox Code Playgroud)

示例(Swift 3):

let date = Date(ticks: 636110903202288256)
Run Code Online (Sandbox Code Playgroud)


小智 15

这是一个我发现非常优雅的解决方案.我扩展了NSDate(虽然它现在只是Swift 3中的Date)包含一个toMillis()函数,它将为你提供你正在使用的日期对象的Int64值.

extension Date {
    func toMillis() -> Int64! {
        return Int64(self.timeIntervalSince1970 * 1000)
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let currentTimeStamp = Date().toMillis()
Run Code Online (Sandbox Code Playgroud)

干杯


vai*_*hav 11

在Swift中:

如果你想makeit作为全局变量,请看下面的代码:

var Timestamp: String {
   return "\(NSDate().timeIntervalSince1970 * 1000)"
}
Run Code Online (Sandbox Code Playgroud)

然后,你可以打电话给它

println("Timestamp: \(Timestamp)")
Run Code Online (Sandbox Code Playgroud)

*1000是毫秒,如果你愿意,你可以删除它.如果将其保留为NSTimeInterval.

var Timestamp: NSTimeInterval {
    return NSDate().timeIntervalSince1970 * 1000
}
Run Code Online (Sandbox Code Playgroud)

在目标C中:

如果您想声明为符号常量,请参阅下面的代码:

#define TimeStamp [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000]
Run Code Online (Sandbox Code Playgroud)

然后像这样称呼它:

NSString * timestamp = TimeStamp;
Run Code Online (Sandbox Code Playgroud)

或者创建一个全局方法:

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

注意: 1000是将时间戳转换为毫秒.如果您希望以秒为单位的timeInterval,则可以删除它.