将当前 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"
我看到了一些帖子,但它们看起来有点复杂,所以想非常具体地表述我的问题,看看是否有相对更简单的方法来实现这一点。
我想在 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"