所以,我在这里寻找另一个问题,然后交叉:
我有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"
为什么会这样?
它不应该与之前的案例相同吗?
为什么我现在有几天甚至一个月的时间中断?
答案 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