获得一年中的某一天很简单,例如。
func dayOfYear(inputDate:NSDate) -> (Int) {
let cal = NSCalendar.currentCalendar()
let returnDay = cal.ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: inputDate)
return returnDay
}
但你怎么反过来呢?它显然只会返回日/月。我可以很容易地编写一个乏味的例程反算,但有一种聪明的方法吗?
答案 0 :(得分:1)
是的,NSCalendar
提供了一种将日历组件合并为单个日期对象的方法。看看我在Playground中写的这个例子:
import UIKit
import Foundation
let inputDate: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let day = calendar.ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: inputDate)
let components = NSDateComponents()
components.day = day
let date = calendar.dateFromComponents(components)
根据文件,
如果提供的组件不足以完全指定绝对时间,则日历将使用其选择的默认值。当信息不一致时,日历可能会忽略某些组件参数,或者该方法可能返回nil。忽略不必要的组件(例如,Day优先于Weekday和Weekday序数)。
此外,
请注意,某些计算可能需要相对较长的时间才能执行。
有关详细信息,请参阅NSCalendar Class Reference。
答案 1 :(得分:1)
func dayOfYear(inputDate: NSDate) -> Int {
return NSCalendar.currentCalendar().ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: inputDate)
}
func dateFromDayOfYear(day: Int) -> NSDate {
return NSCalendar.currentCalendar().dateWithEra(1, year: NSCalendar.currentCalendar().component(.CalendarUnitYear, fromDate: NSDate()), month: 1, day: day, hour: 0, minute: 0, second: 0, nanosecond: 0)!
}
let numberOfDays = dayOfYear(NSDate()) // 195
dateFromDayOfYear(numberOfDays) // "Jul 14, 2015, 12:00 AM"