令人困惑的NSCalendar.dateFromComponents的结果

时间:2015-07-02 13:05:22

标签: ios swift foundation

我尝试使用此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 bute,结果date是2015-07-01 22:00:00

我的错误在哪里?

提到NSDateFormatter,结果很好:

var dateFormatter = NSDateFormatter()

dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

println(dateFormatter.stringFromDate(date!))

结果:

July 2, 2015 at 12:00 AM

1 个答案:

答案 0 :(得分:0)

推进是description的工作方式。它使用NSDate的{​​{1}}方法,并返回以GMT(UTC)为参考的数据。因此,您将看到基于您与GMT的时区偏差的差异。

在输出&#34; 2015-07-01 22:00:00 + 0000&#34;注意结尾&#34; + 0000&#34;这是时区偏移,即GMT,而不是您的时区。

结果是使用日期格式化程序并指定时区,对于设备的时区,您可以使用系统时区:[NSTimeZone systemTimeZone]NSTimeZone.systemTimeZone()用于Swift。