我在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提前一小时出现。有人能告诉我如何解决这个问题吗?非常感谢,谢谢。
答案 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