Swift 2.1 - NSDateFormatter怪异的bug

时间:2015-11-25 07:08:27

标签: swift swift2 xcode7 nsdateformatter

美好的一天!我正在尝试使用this日期选择器对话框创建日期选择器。现在我在设置defaultDate选项时遇到问题,它需要NSDate,所以我做了这个。

let date = NSDate()
let formatter1 = NSDateFormatter()
formatter1.dateFormat = "MMM dd"
formatter1.timeZone = NSTimeZone(abbreviation: "GMT")
formatter1.timeZone = NSTimeZone(forSecondsFromGMT: 28800)
let gmt8TimeZone = formatter1.stringFromDate(date)
let dateToday = formatter1.dateFromString(gmt8TimeZone)
print("\(gmt8TimeZone) - \(dateToday!)")

DatePickerDialog().show("Choose Date", doneButtonTitle: "Done", cancelButtonTitle: "Cancel", defaultDate: dateToday!, datePickerMode: UIDatePickerMode.Date) { (date) -> Void in
    self.dateSelected = date
    self.showTimePicker()
}

问题是,它不是从我设置的defaultDate开始的dateToday。所以我做的是打印日期字符串gmt8TimeZonedateToday,它给了我Nov 25 - 2000-11-24 16:00:00 +0000为什么它给了我不同的日期?它应该是一样的吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

只需将NSDate()提供给defaultDate参数即可。

NSDate基本上是一个时间戳,一个固定的和绝对的时间点,并且没有链接到任何timeZone:NSDate()完全是,现在

当你摆弄NSDateFormatter以及#34;修复"它,你离开绝对时间戳世界进入弦乐世界" yyyy-mm-dd ..."确实需要将时区解释为时间点。因为你搞砸了,你的日期会漂移。