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(smallerNSCalendarUnit,
               inUnit largerNSCalendarUnit,
              forDate dateNSDate) -> Int

假设:以上函数的smaller.Weeklarger.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.Weeklarger.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

       ....

原文地址:https://www.cnblogs.com/muzijie/p/5772739.html