我看到了一些帖子,但它们似乎有点复杂,所以我想非常具体地说出我的问题,看看是否有一种相对简单的方法来实现这一目标。
我想在Swift for NSDate中创建一个名为changeTimeOfDay(hour:Int)的扩展方法,它将给定NSDate的时间更改为您传入的时间。
例如,如果我当前的NSDate变量d恰好是从现在开始的一周,我希望将该日期专门设置为早上8点(所以从现在开始的一周,早上8点我已经有一个可以在特定日期添加周数的扩展方法,以及一个可以增加小时数的扩展方法,但在这种情况下,我想将小时数实际设置为上午8点。
有关此方法的任何想法?我想支持ios7和8.我有点困惑(基于我迄今为止能够找到的内容),这是一种简单的方法。
谢谢!
答案 0 :(得分:4)
您可以创建一些扩展程序,以帮助您从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"
您的功能有一些问题。像这样使用它没有自我价值。你必须创建这个函数作为扩展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"
答案 1 :(得分:0)
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)!
}
这是我最终按照上面的链接进行的操作。 这对你们好吗?
//那里有一些问题。像这样使用它没有自我价值。你必须创建这个函数作为扩展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"