【问题标题】:How to get 18-digit current timestamp in Swift?如何在 Swift 中获取 18 位当前时间戳?
【发布时间】:2017-02-11 07:02:26
【问题描述】:

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

636110767775716756​

但是,当我这样做时:

NSDate().timeIntervalSince1970

它返回一个像这样的值:

1475491615.71278

如何以我想要的格式访问当前时间戳记?我检查了here:的日期

【问题讨论】:

  • 正是您需要当前日期和时间作为字符串.. ?
  • 是的,我需要它作为字符串,18 位格式。
  • 该时间戳的来源/形式是什么?问题是timeIntervalSince1970 的前导数字当前是1,这与您要查找的内容并不匹配。
  • stackoverflow.com/questions/36620342/… 这是我正在寻找的,但在 Swift 中。

标签: ios swift time timestamp


【解决方案1】:

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

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

用法:

let currentTimeStamp = Date().toMillis()

干杯

【讨论】:

  • 感谢您的回复,但它只返回一个 13 位的时间戳,如下所示:1475492283055。我需要 18 位。
【解决方案2】:

在 Swift 中:

如果您想将其设为全局变量,请参见以下代码:

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

那么,你就可以调用它了

println("Timestamp: \(Timestamp)")

*1000 表示毫秒,如果您愿意,可以删除它。如果将其保留为 NSTimeInterval。

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

在目标 C 中:

如果您想声明为符号常量,请参见以下代码:

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

然后这样称呼它:

NSString * timestamp = TimeStamp;

或者创建一个全局方法:

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

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

【讨论】:

    【解决方案3】:

    您似乎正在寻找 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)
    

    同时,从滴答声到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)
    

    【讨论】:

    • 这很好用。我在 NSDate 而不是 Date 上使用了它。
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2013-07-26
    • 2016-07-04
    • 2018-09-26
    相关资源
    最近更新 更多