使用 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 时无法返回目标日期的主要内容,如果未能解决你的问题,请参考以下文章

NSDateComponents 不返回日期

NSDateFormatter 和 NSDateComponents 为周数返回不同的值

NSDateComponents weekOfYear 返回错误的日期

Swift:无法将“NSDate”类型的值转换为预期的参数类型“NSDateComponents”

2 NSDateComponents - 是同一周吗?

NSDateComponents : 查找超过 30 天