为什么Swift Playground的结果与在应用程序中执行的结果不同?

时间:2014-07-05 22:29:43

标签: swift nsdate nscalendar

我在Playground中有以下代码:

import Cocoa

let date = NSDate()
let calendar = NSCalendar( calendarIdentifier:NSGregorianCalendar )
let components = calendar.components( NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate: date )

let dateStrippedOfTimeComponent:NSDate = calendar.dateFromComponents(components)

Playgrounds的结果是2014年7月5日00:00这就是我想要的

然而,相同的代码,当我的viewController中使用作为func的一部分给出结果04 Jul 2014 23:00并且当前的NSDate()结果比它显示我的我的mac提前一小时出现。有人能告诉我如何解决这个问题吗?非常感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

这只是一个显示问题。 两个日期对象是完全相同,但是在打印结果时,操场和应用程序使用两个不同的时区。

NSDate是一个瞬间的纯粹表示。

每当您需要显示它时,您就可以决定格式,区域设置,时区和其他可视化相关信息。例如,您可以在操场上运行它:

let date = NSDate()
// "Jul 6, 2014, 11:43 AM" in my system timezone (Italy)

let calendar = NSCalendar( calendarIdentifier:NSGregorianCalendar ) 
let components = calendar.components( NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate: date )
let dateStrippedOfTimeComponent = calendar.dateFromComponents(components)

let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle

dateFormatter.timeZone = NSTimeZone(abbreviation: "EST")
let estDate = dateFormatter.stringFromDate(dateStrippedOfTimeComponent)
// "Jul 5, 2014, 6:00:00 PM" in NYC

dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
let utcDate = dateFormatter.stringFromDate(dateStrippedOfTimeComponent)
// "Jul 5, 2014, 10:00:00 PM" in London