Swift 3 - UTC时间标签,思考12h / 24h设备时间的变化

时间:2017-01-06 23:24:13

标签: ios swift swift3 nsdateformatter date-formatting

我想将timeUTC转换为“5s ago”。之前标签也在考虑手机上的12h / 24h变化。因为崩溃了。现在下面的代码行返回标签值我想要的Playground。但不是我的ios项目。它没有进入If块。我错过了什么或者有什么问题?

    let dateStringUTC = "2016-10-22 12:37:48 +0000"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"

    if let from = dateFormatter.date(from: dateStringUTC) {

        dateFormatter.dateFormat = "MMM d, yyyy h:mm:ss a"
        let stringFromDate = dateFormatter.string(from: from)
        let dateLast = dateFormatter.date(from: stringFromDate)

        let now = Date()
        let components: NSCalendar.Unit = [.second, .minute, .hour, .day, .weekOfMonth]
        let difference = (Calendar.current as NSCalendar).components(components, from: dateLast!, to: now, options: [])

        if difference.second! <= 0 {
            self.timeInfoLbl.text = "now"
        }
        if difference.second! > 0 && difference.minute! == 0 {
            self.timeInfoLbl.text = String(describing: difference.second!) + "s."
        }
        if difference.minute! > 0 && difference.hour! == 0 {
            self.timeInfoLbl.text = String(describing: difference.minute!) + "m."
        }
        if difference.hour! > 0 && difference.day! == 0 {
            self.timeInfoLbl.text = String(describing: difference.hour!) + "h."
        }
        if difference.day! > 0 && difference.weekOfMonth! == 0 {
            self.timeInfoLbl.text = String(describing: difference.day!) + "d."
        }
        if difference.weekOfMonth! > 0 {
            self.timeInfoLbl.text = String(describing: difference.weekOfMonth!) + "w."

            if difference.weekOfMonth! > 52 {
                let number = Float(difference.weekOfMonth!) / 52
                let strYear = String(format:"%.1f", number)
                self.timeInfoLbl.text = strYear + " year"
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

要将此字符串转换为日期,我会这样做:

let dateStringUTC = "2016-10-22 12:37:48 +0000"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss X"
let date = dateFormatter.date(from: dateStringUTC)!

然后,要以漂亮的格式显示已用时间,请考虑DateComponentsFormatter,例如:

let now = Date()

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.maximumUnitCount = 2
let string = formatter.string(from: date, to: Date())! + " " + NSLocalizedString("ago", comment: "added after elapsed time to say how long before")