将当前 NSDate 设置为早上 8 点

Set a current NSDate to 8AM

我看到了一些帖子,但它们看起来有点复杂,所以想非常具体地表述我的问题,看看是否有相对更简单的方法来实现这一点。

我想在 Swift 中为 NSDate 创建一个名为 changeTimeOfDay(hour: Int) 的扩展方法,它将给定 NSDate 的时间更改为您传入的时间。

例如,如果我当前的 NSDate 变量 d 恰好是从现在开始的一周后,我想将该日期专门设置为早上 8 点(所以它是从现在开始的一周后的早上 8 点)。我已经有一种扩展方法可以将特定日期增加几周,还有一种可以增加小时数,但在这种情况下,我想实际将小时数设置为早上 8 点。

对如何解决这个问题有什么想法吗?我想支持 ios7 和 8。我有点困惑(基于我目前所能找到的)一个简单的方法来做到这一点。

谢谢!

func changeHourOfDay(hour: Int) -> NSDate {
        let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
        let components: NSDateComponents = calendar.components(.YearCalendarUnit | .DayCalendarUnit | NSCalendarUnit.HourCalendarUnit, fromDate: self)
        components.hour = hour
        return calendar.dateFromComponents(components)!
    }

这就是我最终按照上面的 link 所做的。 大家觉得这样好吗?

// 你有一些问题。使用它没有 self 值,就像 this.You 必须创建此函数作为扩展 NSDate 函数才能使用 self。您应该将组件更改为新格式。这就是你应该如何实现你的功能:

extension NSDate {
    func changeHourOfDay(hour: Int) -> NSDate {
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitYear | .CalendarUnitDay | .CalendarUnitHour, fromDate: self)
        components.hour = hour
        return calendar.dateFromComponents(components)!
    }
}

NSDate().changeHourOfDay(8)  //  "Jan 11, 2015, 8:00 AM"

您可以创建一些扩展来帮助您从 NSDate 对象中提取日期信息并将其与所需时间组合,如下所示:

extension NSDate {
    var day:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,   fromDate: self).day   }
    var month: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth, fromDate: self).month }
    var year:  Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,  fromDate: self).year  }
    var at8am: NSDate {
        return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 8, minute: 0, second: 0, nanosecond: 0)!
    }
}


NSDate().at8am   // "Jan 11, 2015, 8:00 AM"

您的函数有一些问题。使用它没有 self 值,就像 this.You 必须创建此函数作为扩展 NSDate 函数才能使用 self。您应该将组件更改为新格式。这就是你应该如何实现你的功能:

extension NSDate {
    func changeHourOfDay(hour: Int) -> NSDate {
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitYear | .CalendarUnitDay | .CalendarUnitHour, fromDate: self)
        components.hour = hour
        return calendar.dateFromComponents(components)!
    }
}

NSDate().changeHourOfDay(8)  //  "Jan 11, 2015, 8:00 AM"