如何使用 SwiftDate 框架在当前时区打印日期和时间(本地化)

How to print Date&time (localized) in current timezone using SwiftDate framework

我正在使用 SwiftDate 框架(请参阅下面的 link) https://github.com/malcommac/SwiftDate

我想打印当前 region/local/timeZone 中的日期和时间。我可以通过使用下面的代码而不使用 SwiftDate 来实现这一点:

DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)

因为 SwiftDate 提供了一个共享的日期格式化程序。我想知道 SwiftDate 是否也可以做到这一点。

我使用扩展来获取本地化日期:

import SwiftDate

extension Date {

//you can specify region/timezone/locale to what you want
    var localizedDate: DateInRegion {
        return self.in(region: Region(calendar: Calendar.current, zone: Zones.current, locale: Locale.current))
    }
}

然后你这样使用它(如果你需要系统本地化日期,只需省略扩展部分):

let dateString = Date().localizedDate.toString(.custom("dd.MM.yyyy."))

我试过 predrag-samardzic 代码,它成功了。现在有两种选择(完成相同的工作),一种使用 NSDateFormatter,另一种使用 SwiftDate,我想对它们进行分析,看看哪个更好。这是我用来分析它们的代码:

func testNSDateFormatter() {
    for _ in 1...10000 {
        print("\(Date().toLocalizedString())")
    }
}

func testSwiftDate() {
    for _ in 1...10000 {
        print("\(Date().localizedDate.toString(.dateTime(.short)))")
    }
}

extension Date {
    func toLocalizedString(dateStyle: DateFormatter.Style = .short, timeStyle: DateFormatter.Style = .short) -> String {
        return DateFormatter.localizedString(from: self, dateStyle: dateStyle, timeStyle: timeStyle)
    }

    var localizedDate: DateInRegion {
         return self.in(region: Region(calendar: Calendar.current, zone: Zones.current, locale: Locale.current))
    }
}

这是探查器的屏幕截图。

分析结果:

NSDateFormatter - 773x SwiftDate - 2674x

NSDateFormatter 比 SwiftDate 快大约 3.45 倍。基于以上所述,我建议使用 NSDateFormatter 而不是 SwiftDate。