日期字符串 - > String-Date中断?

时间:2016-02-02 18:02:37

标签: ios swift swift2 nsdate nsdateformatter

所以,我在这里寻找另一个问题,然后交叉:

我有NSDate

的扩展程序
extension NSDate {
    private class var formatter : NSDateFormatter {
        let nsDateFormatter = NSDateFormatter()
        nsDateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
        nsDateFormatter.locale = NSLocale.currentLocale()
        return nsDateFormatter
    }
    //NSString to NSDate
    public convenience init(dateString:String) {
        let dateObj = NSDate.formatter.dateFromString(dateString)!
        self.init(timeInterval: 0, sinceDate: dateObj)
    }

    //NSDate to String
    public func getString() -> String {
       return NSDate.formatter.stringFromDate(self)
    }
}

这很好用:

var date = NSDate()                       //"Feb 2, 2016, 12:36 PM"
var string = date.getString()             //"2016-02-02 12:36:11 -0500"

let copyDate = NSDate(dateString: string) //"Feb 2, 2016, 12:36 PM"
copyDate.getString()                      //"2016-02-02 12:36:11 -0500"
  

如果我使用,例如:

“EEE,d MMM YYYY HH:mm:ss zzz”作为dateFormat:

var date = NSDate()                       //"Feb 2, 2016, 12:58 PM"
var string = date.getString()             //"Tue, 2 Feb 2016 12:58:48 GMT-5"

let copyDate = NSDate(dateString: string) //"Dec 22, 2015, 12:58 PM"
copyDate.getString()                      //"Tue, 22 Dec 2015 12:58:48 GMT-5"

为什么会这样?

它不应该与之前的案例相同吗?

为什么我现在有几天甚至一个月的时间中断?

1 个答案:

答案 0 :(得分:1)

您正在使用capital Y for year instead of y

  

年份("年度周"基于日历)。今年的指定用于ISO 8601定义的ISO年 - 周日历,但可用于需要周日处理的非基于格里高利的日历系统。可能并不总是与日历年相同的值。

将格式更改为"EEE, d MMM yyyy HH:mm:ss zzz"

您可以在此处详细了解ISO周日期:https://en.wikipedia.org/wiki/ISO_week_date