从组件创建 NSDate,无需"时区更正"



我有一个函数

func createDate(day: Int, month: Int, year: Int) -> NSDate {
    var comp = NSDateComponents()
    comp.day = day
    comp.month = month
    comp.year = year
    var cal = NSCalendar.currentCalendar()
    if var date = cal.dateFromComponents(comp) {
        return date
    }
    return NSDate()
}

如果我称之为

createDate(07, 01, 1984)

输出为CCD_ 1。我认为是受时区的影响。如何调整我的代码,使输出为1984-01-07 00:00:00 +0000?我做错了什么?我怎么会感到困惑?

不需要使用NSDateComponents来输入时间。NSCalendar已经为您提供了一种使用当地时间输入日期的方法。它被称为dateWithEra。"+0000"不是您的本地时间(CET),而是UTC时间。您的时区不与NSDate对象一起存储,只存储localTime输入的相应UTC日期和时间。

let myDate = NSCalendar.currentCalendar().dateWithEra(1, year: 1984, month: 1, day: 7, hour: 0, minute: 0, second: 0, nanosecond: 0)!

myDate.descriptionWithLocale(NSLocale.currentLocale())!   // "Saturday, January 7, 1984 at 12:00:00 AM Brasilia Standard Time"

NSTimeZone.localTimeZone().secondsFromGMT

不要担心日志输出。这将是一个未格式化的日期。实际日期似乎正是你想要的。

如果要显示确切日期,则必须使用NSDateFormatter显示。

最新更新