Swift完整日期,以毫秒为单位

pab*_*ros 28 ios swift

有没有办法用毫秒打印完整的日期?

例如,我这样做:

print("\(NSDate())")
Run Code Online (Sandbox Code Playgroud)

但我只是得到这个:

2016-05-09 22:07:19 +0000
Run Code Online (Sandbox Code Playgroud)

如何在完整日期获得毫秒数?

Wil*_*ill 73

针对Swift 3进行了更新

let d = Date()
let df = DateFormatter()
df.dateFormat = "y-MM-dd H:m:ss.SSSS"

df.string(from: d) // -> "2016-11-17 17:51:15.1720"
Run Code Online (Sandbox Code Playgroud)

当你有一个Date d,你可以使用NSDateFormatter获取格式化的字符串.您还可以使用格式化程序将基于格式的字符串日期转换为Date

有关dateFormat可以执行的操作的更多信息,请参阅此图表http://waracle.net/iphone-nsdateformatter-date-formatting-table/

  • 这是一种非常具有误导性的格式,因为您使小数秒看起来像时区。更好的格式是在末尾添加“ss.SSS”而不是“ss +SSSS”。 (3认同)
  • 阅读"y"和"Y"的文档.他们是两个不同的年份.一个人想要的时间是99.99%,而不是"Y".是什么让你认为OP希望毫秒格式化为时区?它们只是显示打印日期的标准输出(默认显示时区偏移),并询问如何为该输出添加毫秒.这并不意味着他们希望将毫秒格式化为时区. (3认同)
  • 毫秒难道不是“y-MM-dd H:mm:ss.SSS”(只有 3 个“S”)吗? (2认同)

sla*_*los 5

Swift 5往返时间戳字符串扩展

extension String {
    static func timestamp() -> String {
        let dateFMT = DateFormatter()
        dateFMT.locale = Locale(identifier: "en_US_POSIX")
        dateFMT.dateFormat = "yyyyMMdd'T'HHmmss.SSSS"
        let now = Date()

        return String(format: "%@", dateFMT.string(from: now))
    }

    func tad2Date() -> Date? {
        let dateFMT = DateFormatter()
        dateFMT.locale = Locale(identifier: "en_US_POSIX")
        dateFMT.dateFormat = "yyyyMMdd'T'HHmmss.SSSS"

        return dateFMT.date(from: self)
    }
}
Run Code Online (Sandbox Code Playgroud)