您可以创建一些扩展来帮助您从 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 值。您必须将此函数创建为扩展 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"