NSCalendar--日历、日程、时间
1 获取系统的本地信息
//返回当前用户的逻辑日历(Returns the logical calendar for the current user.)
+ currentCalendar
//返回当前用户的当前逻辑日历 (Returns the current logical calendar for the current user.)
+ autoupdatingCurrentCalendar
2 创建或初始化日历
+ calendarWithIdentifier: - initWithCalendarIdentifier:
identifier的选项有:
NSCalendarIdentifierGregorian: 大部分地区都可以用这个
NSCalendarIdentifierChinese: 中国日历也可以使用这个,尤其是用于计算天文数字的日期和中国传统假期的时候
3 获取日历的信息(有必要也可以进行设置)
locale: 区域
timeZone: 时区
firstWeekday: 每周第一天从星期几开始,1表示星期日,2表示星期一
- (NSRange)maximumRangeOfUnit:(NSCalendar)unit 返回某个NSCalendarUnit内的最大范围(例如:Gregorian calendar的Day unit的最大范围是1-31)
- (NSRange)minimumRangeOfUnit:(NSCalendar)unit 返回某个NSCalendarUnit内的最小范围(例如:Gregorian calendar的Day unit的最大范围是1-28)
minimumDaysInFirstWeek: (每年、每月)第一周必须包含的最少天数
//返回当前日期在large unit中small unit的第几个unit
func ordinalityOfUnit(_smaller
: NSCalendarUnit,
inUnitlarger
: NSCalendarUnit,
forDatedate
: NSDate) -> Int
假设:以上函数的smaller为.Week,larger为.Year时,minimumDaysInFirstWeek属性影响它的返回值。具体说明如下:
2011年1月
2011年1月第一周包括1号。
a. 如果将minimumDaysInFirstWeek设定 = 1
则fromDate传入1月1号,方法均返回1 ==> 满足minimumDaysInFirstWeek指定的天数(最少1天),所以方法将其归为2011年的第1周
则fromDate传入1月2-8号,方法均返回2
则fromDate传入1月9-15号,方法均返回3
......
b. 如果将minimumDaysInFirstWeek设定为 > 1,比如2
则fromDate传入1月1号,方法均返回53 ==> 不足2天,所以方法将其归为2010年的第53周
则fromDate传入1月2-8号,方法均返回1
则fromDate传入1月9-15号,方法均返回2
......
2013年1月
2013年1月第一周包括1-5号共5天。
a. 如果将minimumDaysInFirstWeek设定为 <= 5时
则fromDate传入1月1-5号,方法均返回1 ==> 满足minimumDaysInFirstWeek指定的天数,所以方法将其归为2013年的第1周
则fromDate传入1月6-12号,方法均返回2
则fromDate传入1月13-19号,方法均返回3
......
b. 如果将minimumDaysInFirstWeek设定为 > 5,比如6
则fromDate传入1月1-5号,方法均返回53 ==> 当周不足6天,所以方法将其归为2012年的第53周
则fromDate传入1月2-8号,方法均返回1
则fromDate传入1月9-15号,方法均返回2
......
继续假设:以上函数的smaller为.Week,larger为.Month时,minimumDaysInFirstWeek属性影响它的返回值。具体说明如下:
以上图中2013年1月为例:
2013年1月第一周包括1、2、3、4、5号。
a. 如果将minimumDaysInFirstWeek设定为小于或等于5的数
则fromDate传入1月1-5号,方法均返回1
则fromDate传入1月6-12号,方法均返回2
则fromDate传入1月13-19号,方法均返回3
....
b. 如果将minimumDaysInFirstWeek设定为大于5的数
则fromDate传入1月1-5号,方法均返回0
则fromDate传入1月6-12号,方法均返回1
则fromDate传入1月13-19号,方法均返回2
....