从没有 "timezone correction" 的组件创建 NSDate
Creating NSDate from components without "timezone correction"
我有一个功能
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
?我在这里弄错了什么?我怎么糊涂了?
不用担心日志输出。这将是一个 未格式化 日期。实际日期似乎正是您想要的。
如果你想显示确切的日期,你必须使用NSDateFormatter
来显示它。
不需要使用NSDateComponents来输入时间。 NSCalendar 已经有一种方法可以让您使用当地时间输入日期。它被称为 dateWithEra。
"+0000" 这不是您的本地时间 (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
我有一个功能
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
?我在这里弄错了什么?我怎么糊涂了?
不用担心日志输出。这将是一个 未格式化 日期。实际日期似乎正是您想要的。
如果你想显示确切的日期,你必须使用NSDateFormatter
来显示它。
不需要使用NSDateComponents来输入时间。 NSCalendar 已经有一种方法可以让您使用当地时间输入日期。它被称为 dateWithEra。 "+0000" 这不是您的本地时间 (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