NSCalendar.dateFromComponents 的令人困惑的结果
Confusing result of NSCalendar.dateFromComponents
我尝试使用此 Swift 代码获取不带小时和分钟的当前日期:
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: NSDate())
println(components)
let date = calendar.dateFromComponents(components)
println(date)
我用 println
得到的结果让我有点困惑:
<NSDateComponents: 0x7fb5ad867700>
Calendar Year: 2015
Month: 7
Leap month: no
Day: 2
2015-07-01 22:00:00 +0000
components
是 2015-07-02 但结果 date
是 2015-07-01 22:00:00
我的错误在哪里?
A 提到 NSDateFormatter
结果很好:
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
println(dateFormatter.stringFromDate(date!))
结果:
July 2, 2015 at 12:00 AM
推进是 println(date)
的工作方式。它使用 NSDate
的 description
方法和 returns 参考 GMT (UTC) 的数据。因此,根据您与格林威治标准时间的时区偏移,您会看到差异。
在输出“2015-07-01 22:00:00 +0000”中,请注意结尾的“+0000”,这是时区偏移量,即 GMT,而不是您的时区。
结果是使用日期格式化程序并指定时区,对于设备的时区,您可以使用系统时区:[NSTimeZone systemTimeZone]
或 NSTimeZone.systemTimeZone()
for Swift。
我尝试使用此 Swift 代码获取不带小时和分钟的当前日期:
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: NSDate())
println(components)
let date = calendar.dateFromComponents(components)
println(date)
我用 println
得到的结果让我有点困惑:
<NSDateComponents: 0x7fb5ad867700>
Calendar Year: 2015
Month: 7
Leap month: no
Day: 2
2015-07-01 22:00:00 +0000
components
是 2015-07-02 但结果 date
是 2015-07-01 22:00:00
我的错误在哪里?
A 提到 NSDateFormatter
结果很好:
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
println(dateFormatter.stringFromDate(date!))
结果:
July 2, 2015 at 12:00 AM
推进是 println(date)
的工作方式。它使用 NSDate
的 description
方法和 returns 参考 GMT (UTC) 的数据。因此,根据您与格林威治标准时间的时区偏移,您会看到差异。
在输出“2015-07-01 22:00:00 +0000”中,请注意结尾的“+0000”,这是时区偏移量,即 GMT,而不是您的时区。
结果是使用日期格式化程序并指定时区,对于设备的时区,您可以使用系统时区:[NSTimeZone systemTimeZone]
或 NSTimeZone.systemTimeZone()
for Swift。