来自周数的 NSDate
NSDate from week number
我正在尝试使用 Swift 创建每周重复的本地通知。通知将设置为每周的第一天,并且在 10:00。当然我不想为过去的日期设置通知,所以我需要看看现在是否已经过了一周的第一天 10:00。如果没有,我将在今天 10:00 创建通知,否则下周星期一 10:00。
我创建了一个扩展来计算当前日期的周数。
extension NSDate {
func weekOfYear() -> Int {
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.WeekOfYear, fromDate: self)
let weekOfYear = components.weekOfYear
return weekOfYear
}
}
我不能再进一步了。任何帮助表示赞赏。
问候。
您的问题有更简单的解决方案。可以使用NSCalendar
的nextDateAfterDate()
方法:
let cal = NSCalendar.currentCalendar()
let comps = NSDateComponents()
comps.hour = 10
comps.weekday = cal.firstWeekday
let now = NSDate()
let fireDate = cal.nextDateAfterDate(now, matchingComponents: comps, options: [.MatchNextTimePreservingSmallerUnits])!
这给出了未来的第一个日期,即一周的第一天 10:00。
我正在尝试使用 Swift 创建每周重复的本地通知。通知将设置为每周的第一天,并且在 10:00。当然我不想为过去的日期设置通知,所以我需要看看现在是否已经过了一周的第一天 10:00。如果没有,我将在今天 10:00 创建通知,否则下周星期一 10:00。
我创建了一个扩展来计算当前日期的周数。
extension NSDate {
func weekOfYear() -> Int {
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.WeekOfYear, fromDate: self)
let weekOfYear = components.weekOfYear
return weekOfYear
}
}
我不能再进一步了。任何帮助表示赞赏。 问候。
您的问题有更简单的解决方案。可以使用NSCalendar
的nextDateAfterDate()
方法:
let cal = NSCalendar.currentCalendar()
let comps = NSDateComponents()
comps.hour = 10
comps.weekday = cal.firstWeekday
let now = NSDate()
let fireDate = cal.nextDateAfterDate(now, matchingComponents: comps, options: [.MatchNextTimePreservingSmallerUnits])!
这给出了未来的第一个日期,即一周的第一天 10:00。