Cocoa中对日期和时间的处理 NSCalendar (一)

NSCalendar用于处理时间相关问题。比如比较时间前后、计算日期所在的周别等。

 

1. 创建或初始化可用以下方法
    + (id)currentCalendar;
    取得当前用户的逻辑日历(logical calendar)

    + (id)autoupdatingCurrentCalendar;
    取得当前用户的逻辑日历(logical calendar), ......

    - (id)initWithCalendarIdentifier:(NSString *)identifier;
    初始化为各种日历。identifier的范围可以是:
       NSGregorianCalendar
       NSBuddhistCalendar
       NSChineseCalendar
       NSHebrewCalendar
       NSIslamicCalendar
       NSIslamicCivilCalendar
       NSJapaneseCalendar


2. 使用前若有必要可以先做以下设定
    - (void)setLocale:(NSLocale *)locale;
    设置区域

    - (void)setTimeZone:(NSTimeZone *)tz;
    设置时区

    - (void)setFirstWeekday:(NSUInteger)value;
    设定每周的第一天从星期几开始,比如:
    . 如需设定从星期日开始,则value传入1
    . 如需设定从星期一开始,则value传入2
    . 以此类推
   
    详细信息请参阅FirstWeekday属性


    - (void)setMinimumDaysInFirstWeek:(NSUInteger)value;
    设定作为(每年及每月)第一周必须包含的最少天数,比如:
    . 如需设定第一周最少包括7天,则value传入7

    详细信息请参阅MinimumDaysInFirstWeek属性


3. 取回设定信息用以下方法
    - (NSString *)calendarIdentifier
    返回日历标示符(identifier)。有效的日历标示符包括:
       NSGregorianCalendar
       NSBuddhistCalendar
       NSChineseCalendar
       NSHebrewCalendar
       NSIslamicCalendar
       NSIslamicCivilCalendar
       NSJapaneseCalendar


    - (NSLocale *)locale;
    返回日历指定的地区信息。它将影响???

    - (NSTimeZone *)timeZone;
    返回日历指定的时区信息。它将影响???


    - (NSUInteger)firstWeekday;
    返回日历指定的每周的第一天从星期几开始。缺省为星期天,即firstWeekday = 1

    当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]的ordinalityOfUnit参数为NSWeekdayCalendarUnit,inUnit参数为NSWeekCalendarUnit时,firstWeekday属性影响它的返回值。具体说明如下:
    . 当firstWeekday被指定为星期天(即 = 1)时,它返回的值与星期几对应的数值保持一致。比如:
      fromDate传入的参数是星期日,则函数返回1
      fromDate传入的参数是星期一,则函数返回2

    . 当firstWeekday被指定为其它值时(即 <> 1)时,假设firstWeekday被指定为星期一(即 = 2),那么:
       fromDate传入的参数是星期一,则函数返回1
       fromDate传入的参数是星期二,则函数返回2
       fromDate传入的参数是星期日,则函数返回7


    - (NSUInteger)minimumDaysInFirstWeek;
    返回日历指定的第一周必须包含的最少天数。缺省为1,即minimumDaysInFirstWeek = 1。

    当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]的ordinalityOfUnit参数为NSWeekCalendarUnit,inUnit参数为NSYearCalendarUnit时,minimumDaysInFirstWeek属性影响它的返回值。具体说明如下:

       2005年1月
       日   一   二   三   四   五   六
       --------------------------------------
                                      1
        2    3    4    5    6    7    8   
        9   10   11   12   13   14   15  
       16   17   18   19   20   21   22
       23   24   25   26   27   28   29
       30   31  

    2005年1月第一周包括1号。
    a. 如果将minimumDaysInFirstWeek设定 = 1
       则fromDate传入1月1号,方法均返回1  ==> 满足minimumDaysInFirstWeek指定的天数(最少1天),所以方法将其归为2005年的第1周
       则fromDate传入1月2-8号,方法均返回2
       则fromDate传入1月9-15号,方法均返回3
       ......

    b. 如果将minimumDaysInFirstWeek设定为 > 1,比如2
       则fromDate传入1月1号,方法均返回53  ==> 不足2天,所以方法将其归为2004年的第53周
       则fromDate传入1月2-8号,方法均返回1
       则fromDate传入1月9-15号,方法均返回2
       ......


       2008年1月
       日   一   二   三   四   五   六
       --------------------------------------
                  1    2    3    4    5
        6    7    8    9   10   11   12
       13   14   15   16   17   18   19
       20   21   22   23   24   25   26
       27   28   29   30   31  

    2005年1月第一周包括1-5号共5天。
    a. 如果将minimumDaysInFirstWeek设定为 <= 5时
       则fromDate传入1月1-5号,方法均返回1  ==> 满足minimumDaysInFirstWeek指定的天数,所以方法将其归为2008年的第1周
       则fromDate传入1月6-12号,方法均返回2
       则fromDate传入1月13-19号,方法均返回3
       ......

    b. 如果将minimumDaysInFirstWeek设定为 > 5,比如6
       则fromDate传入1月1-5号,方法均返回53  ==> 当周不足6天,所以方法将其归为2007年的第53周
       则fromDate传入1月2-8号,方法均返回1
       则fromDate传入1月9-15号,方法均返回2
       ......


    当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]的ordinalityOfUnit参数为NSWeekCalendarUnit,inUnit参数为NSMonthCalendarUnit时,minimumDaysInFirstWeek属性影响它的返回值。以2008年4月为例, 具体说明如下:

       2008年4月
       日   一   二   三   四   五   六
       --------------------------------------
                  1    2    3    4    5
        6    7    8    9   10   11   12
       13   14   15   16   17   18   19
       20   21   22   23   24   25   26
       27   28   29   30  


    2008年4月第一周包括1、2、3、4、5号。
    a. 如果将minimumDaysInFirstWeek设定为小于或等于5的数
       则fromDate传入4月1-5号,方法均返回1
       则fromDate传入4月6-12号,方法均返回2
       则fromDate传入4月13-19号,方法均返回3
       ....

    b. 如果将minimumDaysInFirstWeek设定为大于5的数
       则fromDate传入1-5号,方法均返回0
       则fromDate传入6-12号,方法均返回1
       则fromDate传入13-19号,方法均返回2
       ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值