操场上的 NSFormatter 与项目中的工作方式不同

NSFormatter in playground works different than in project

我在日期格式方面遇到了很大的困难。我想完全忽略时区,因为所有时间都被认为是本地时间。我在操场上试过了,效果很好。

var dateFormatter: NSDateFormatter = NSDateFormatter()
var dateString = "2015-09-02 22:05:00"

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
//dateFormatter.timeZone = NSTimeZone.localTimeZone()

let openDate = dateFormatter.dateFromString(dateString)

上面的代码创建了一个"Sep 2, 2015, 10:05 PM"的日期值,这正是我想要的。然而,当我将相同的代码复制并粘贴到一个简单的项目中时,返回的值总是“2015-09-03 04:05:00 +0000”,这正是我不想要的。我希望无论我现在身在何处,我都希望日期始终处于与保存日期相同的时区。

有什么方法可以让它完全忽略时区?我想在本地保存一个日期并在本地检索它,但它一直在改变我的时间。在日期格式化程序中设置时区没有区别。为什么它在操场上有效但在项目中无效?谢谢

NSDate adopts the NSCoding protocol, and can be placed directly in NSUserDefaults,因此您根本不必担心序列化问题。

您可以忽略时区,将您的日期视为 UTC 时间,如下所示:

let dateFormatter: NSDateFormatter = NSDateFormatter()
let dateString = "2015-09-02 22:05:00"

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)!
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let dateFromString = dateFormatter.dateFromString(dateString){
    println(dateFromString)  // "2015-09-02 22:05:00 +0000"
    let stringFromDate = dateFormatter.stringFromDate(dateFromString)
    println(stringFromDate)   // "2015-09-02 22:05:00"
}