NSDateFormatter 减少日期的日期

NSDateFormatter decreases the day of date

我需要将 Date 变量存储在 CoreDataiOS

我只需要存储没有时间的日期,所以我制作了一个格式化程序,从 NSDate 变量中丢弃了时间分区。 但是我有一个奇怪的结果: 这是我的代码:

    let dateStr = "2016-02-14 11:27:01"

    let df2 = NSDateFormatter()
    df2.timeZone = NSTimeZone.defaultTimeZone()
    df2.dateFormat = "yyyy-MM-dd HH:mm:ss"
    print(dateStr)

    if let date = df2.dateFromString(dateStr) {
        df2.dateFormat = "yyyy-MM-dd"
        print("-> \(df2.dateFromString(df2.stringFromDate(date)))")
    }

这是输出:

2016-02-14 11:27:01
-> Optional(2016-02-13 20:00:00 +0000)

为什么格式化程序将一天减少一天? 我尝试了很多约会都遇到了同样的问题

你的时区显然是UTC+4。

要获得 UTC,请相应地设置时区。

df2.timeZone = NSTimeZone(forSecondsFromGMT: 0)

但是,尽管您看到的是 4 小时前的日期,但 NSDate 对象会根据您所在的时区得到正确处理。 print 命令始终显示 UTC 忽略时区信息,因为 NSDate 只是 Double 数字的包装器。