【问题标题】:Can't get target date returned when using NSDateComponents使用 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 将日期转换为字符串值。我似乎无法让日期正确。

标签: swift nsdatecomponents gregorian-calendar


【解决方案1】:

我用以下几行修改了我的代码。如果有人能发现任何错误,我将不胜感激。该代码似乎确实有效。

var currentZone = NSTimeZone.localTimeZone()
    if (currentZone.isDaylightSavingTimeForDate(date)) {

       components.hour = +1

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多