Как напечатать дату и время (локализовано) в текущем часовом поясе, используя платформу SwiftDate - PullRequest
2 голосов
/ 08 марта 2020

Я использую платформу SwiftDate (см. Ссылку ниже) https://github.com/malcommac/SwiftDate

Я хочу напечатать дату и время в текущем регионе / local / timeZone. Я могу добиться этого, используя приведенный ниже код без SwiftDate:

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

Поскольку SwiftDate предоставляет общий форматер даты. Я хотел бы знать, возможно ли то же самое с SwiftDate.

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я попробовал код predrag-samardzi c, и это сработало. Теперь, когда есть два варианта (для выполнения одной и той же работы), один с 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 Vs SwiftDate - Time Profile

Результат профилирование:

NSDateFormatter - 773x SwiftDate - 2674x

NSDateFormatter примерно в 3,45 раза быстрее, чем SwiftDate. Исходя из вышеизложенного, я бы рекомендовал использовать NSDateFormatter поверх SwiftDate.

0 голосов
/ 08 марта 2020

Я использую расширение для получения локализованной даты:

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."))
...