使用 NSDateComponents 时无法返回目标日期
Posted
技术标签:
【中文标题】使用 NSDateComponents 时无法返回目标日期【英文标题】:Can't get target date returned when using NSDateComponents 【发布时间】:2015-04-19 19:02:59 【问题描述】:我知道下面的代码返回的是 GMT 时间,我们目前是 GMT+1。我正在尝试调整我的代码,以便返回正确的日期。如果我只是添加 1 小时的代码,它将在 GMT+1 恢复为 GMT 时失败。有什么想法吗?
let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
gregorian.timeZone = NSTimeZone.localTimeZone()
var unitFlags : NSCalendarUnit = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitWeekOfYear | NSCalendarUnit.CalendarUnitWeekday
gregorian.firstWeekday = 2
var components:NSDateComponents = gregorian.components(unitFlags, fromDate: date)
components.weekday = 2
components.hour = 0
components.minute = 0
components.second = 0
let resultDate:NSDate = gregorian.dateFromComponents(components)!
println("The resultDate is \(resultDate)")
【问题讨论】:
NSDate 的 println() 始终以 GMT 打印日期(这不会使其“不正确”)。这看起来与您上一个问题中的问题相同。 – 要根据您当地的时区打印日期,您必须使用 NSDateFormatter 将其转换回字符串。 感谢 Martin,我正在记录两个日期,并生成一个介于两个日期之间的值的 pdf 报告。我知道我可以使用 NSDateFormatter 将日期转换为字符串值。我似乎无法让日期正确。 【参考方案1】:我用以下几行修改了我的代码。如果有人能发现任何错误,我将不胜感激。该代码似乎确实有效。
var currentZone = NSTimeZone.localTimeZone()
if (currentZone.isDaylightSavingTimeForDate(date))
components.hour = +1
【讨论】:
以上是关于使用 NSDateComponents 时无法返回目标日期的主要内容,如果未能解决你的问题,请参考以下文章
NSDateFormatter 和 NSDateComponents 为周数返回不同的值
NSDateComponents weekOfYear 返回错误的日期