从没有“时区校正”的组件创建NSDate

时间:2015-03-01 10:08:37

标签: ios swift nsdate nscalendar nsdatecomponents

我有一个功能

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)

输出为1984-01-06 23:00:00 +0000。我假设时区有一些影响。如何调整代码以使输出为1984-01-07 00:00:00 +0000?我在这里弄错了什么?我怎么糊涂了?

2 个答案:

答案 0 :(得分:1)

无需使用NSDateComponents来输入时间。 NSCalendar已经有一种方法可以让您使用当地时间输入日期。它被称为dateWithEra。 &#34 + 0000"它不是你的localTime(CET)它是UTC时间。您的timeZone不与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

答案 1 :(得分:0)

不要担心日志输出。它将是未格式化的日期。实际日期似乎正是您的意图。

如果您想显示确切日期,则必须使用NSDateFormatter进行显示。