Swift 2.1 - NSDateFormatter 奇怪的错误

标签 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 为什么它给我不同的日期?应该是一样的吧?我做错了什么?

最佳答案

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

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

当您摆弄 NSDateFormatter 来“修复”它时,您会从绝对时间戳世界进入字符串世界“yyyy-mm-dd ...”,这确实需要将时区解释为时间点。由于你搞砸了它,你的约会就会发生变化。

关于Swift 2.1 - NSDateFormatter 奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910436/

相关文章:

ios - AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)

swift - 编译 Swift 资源卡在 Xcode 7.0.1 中

xcode - 如何从 Firebase 在 Swift 中获取下一个数据

swift - StackView 未填充 Scrollview

ios - 在 Swift 中编写异步委托(delegate)方法

ios - 在 Swift CLI 中使用 GCD

ios - Spritekit Swift 游戏菜单放大屏幕

ios - tableViewController 上的自动调整 View 大小

ios - Swift 4-应用程序在按下启动 segue 的按钮时崩溃

ios - 如何为结构的每个成员分配一个编号? ( swift )