Как кодировать 'let timestamp: Date', чтобы получить 10 мая 2018 22:00 - PullRequest
0 голосов
/ 09 мая 2018

В моем dateLabel я получаю следующий результат 2018-05-09 02:21:23 +0000. В каком месте моего кода мне нужно выполнить «форматирование даты», чтобы получить 10 мая 2018 года в 22:00. Спасибо.

struct Model {
    let firstName: String
    let lastName: String
    let timestamp: Date

    static func loadSampleData() -> [Model] {
        return [
            Model(firstName: "john", lastName: "doe", timestamp: Date()),
            Model(firstName: "alex", lastName: "doe", timestamp: Date()),
            Model(firstName: "lisa", lastName: "doe", timestamp: Date())
        ]
    }
}

class ModelTableViewCell: UITableViewCell {
    @IBOutlet weak var firstNameLabel: UILabel!
    @IBOutlet weak var lastNameLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!

    func update(with name: Model) {
        firstNameLabel.text = name.firstName
        lastNameLabel.text = name.lastName
        dateLabel.text = "\(name.timestamp)"
    }
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Форматер даты - очень тяжелый объект, поэтому не делайте его локальным и попробуйте повторно использовать этот объект в приложении. Для этого вы можете сделать extension из DateFormatter и сделать в нем статическое свойство для этого форматера. Определите все средства форматирования в этом расширении. Чтобы использовать его просто где угодно в вашем приложении, сделайте расширение Date и используйте его.

extension DateFormatter {
    static let shortDate: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "MMM dd,yyyy hh:mm a"
        return formatter
    }()
}

extension Date {
    /// Prints a string representation for the date with the given formatter
    func string(with format: DateFormatter) -> String {
        return format.string(from: self)
    }

    /// Creates an `Date` from the given string and formatter. Nil if the string couldn't be parsed
    init?(string: String?, formatter: DateFormatter) {
        guard let date = formatter.date(from: string ?? "") else { return nil }
        self.init(timeIntervalSince1970: date.timeIntervalSince1970)
    }
}

Используйте это в вашем update(with name: Model) методе как:

let strDate = name.timestamp.string(with: .shortDate)

Теперь передайте strDate в вашем ярлыке. Если вы хотите преобразовать строку в дату, используйте метод string(with format: DateFormatter).

0 голосов
/ 09 мая 2018

Используйте форматер даты в своем методе update вместо использования интерполяции строк.

func update(with name: Model) {
    firstNameLabel.text = name.firstName
    lastNameLabel.text = name.lastName

    let fmt = DateFormatter()
    fmt.dateStyle = .medium
    fmt.timeStyle = .medium

    dateLabel.text = fmt.string(from: name.timestamp)
}

Установите стили в соответствии с вашими потребностями.

...