swift2 Swift 2.1 - NSDateFormatter奇怪的错误

mwg9r5ms  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(165)

日安!我正在尝试使用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,为什么它给我的是不同的日期,它应该是一样的,对吗?我做错了什么?

csbfibhn

csbfibhn1#

只需向defaultDate参数提供NSDate()即可。
NSDate基本上是一个时间戳,是一个固定的绝对时间点,不与任何时区相关联:NSDate()是绝对的、完全的、now
当你摆弄NSDateFormatter来“修复”它时,你就离开了绝对时间戳世界,进入了字符串世界“yyyy-mm-dd...”,这确实需要将时区解释为时间点。

相关问题