Swift 以毫秒为单位打印完整日期

问题描述 投票:0回答:3

有没有办法以毫秒为单位打印完整日期?

例如,我正在这样做:

print("\(NSDate())")

但我刚刚明白了:

2016-05-09 22:07:19 +0000

如何获取完整日期中的毫秒数?

ios swift datetime date-formatting
3个回答
156
投票

更新为 Swift 3

let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "y-MM-dd H:mm:ss.SSSS"

formatter.string(from: date) // -> "2016-11-17 17:51:15.1720"

当您有

Date
date
时,您可以使用
DateFormatter
获取格式化字符串。您还可以使用格式化程序将基于您的格式的字符串日期转换为
Date

有关 dateFormat 功能的更多信息,请参阅此图表 http://waracle.net/iphone-nsdateformatter-date-formatting-table/


7
投票

Swift 5 与时间戳字符串扩展

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

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

    func tad2Date() -> Date? {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        dateFormatter.dateFormat = "yyyyMMdd'T'HHmmss.SSSS"
    
        return dateFormatter.date(from: self)
    }
}

0
投票

斯威夫特5

您现在还可以使用区域设置感知

formatted()
API 来显示毫秒:

let date = Date()
print(date.formatted(Date.FormatStyle().month(.twoDigits).day(.twoDigits).year().hour().minute().second(.twoDigits).secondFraction(.fractional(3)).timeZone(.iso8601(.short))))
// "18.04.2024, 11:50:14,696 +0200" (my current locale is "DE")

现在这是一些长字符串。您可以将其分解并将格式存储在某处以供重复使用:

let preferredFormat = Date.FormatStyle()
    .weekday(.abbreviated)
    .month(.twoDigits)
    .day(.twoDigits)
    .year()
    .hour()
    .minute()
    .second(.twoDigits)
    .secondFraction(.fractional(3))
    .timeZone(.iso8601(.short))
    .locale(.init(identifier: "US"))

print(date.formatted(preferredFormat))
// "Thu, 04/18/2024, 11:49:44.133 +0200"
© www.soinside.com 2019 - 2024. All rights reserved.