ios 日期显示

1.0 NSDateFormatter *formatter = [[NSDateFotmatter alloc] init];

      [formatter setDateFormat:@"yyyy-mm-dd-hh-mm-ss"];

     NSString *date = [formatter stringFormDate:[NSDate date]];

      NSLog(@"%@",date);



打印出结果是:

2014-22-28-03-22-24


1.1   NSDate* date = [[NSDate alloc] init];
        date = [date dateByAddingTimeInterval:-5*3600*24];  //这个是可以获取5天前的时间,以此类推

1.2   NSCalendar *calendar = [[NSCalendar alloc]init];
        NSDate *date;
        NSDateComponents *comps = [[NSDateComponents alloc]init];
        
      
        NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
        NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
        date=[NSDate date];
        comps = [calendar components:unitFlags fromDate:date];
       NSInteger week = [comps weekday];
       NSInteger month = [comps month];
       NSInteger day = [comps day];
       NSInteger hour = [comps hour];
       NSInteger min = [comps minute];
       NSInteger sec = [comps second];



原文:http://cache.baiducontent.com/c?m=9d78d513d99f00fe0bb3c3225b4597725e14de6c6691965768d5e0558e211e04506694ea7b724e5986846b6776fe1403f7b5712a6c507cb49acc8a578efbc37274cc7029701e85420fd112b2c94138c1239450ebad1cf0ba8768d5f18c&p=9d759a46d6c004b512be9b7c5308bb&newp=9b6edf15d9c041ac17be9b7c585c9d231610db2151ddd71230&user=baidu&fm=sc&query=NSCalendar&qid=&p1=1

NSCalendar

日历类

Cocoa中对日期和时间的处理 NSCalendar () (2008-11-12 21:54:10)

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参数为NSWeekdayCalendarUnitinUnit参数为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参数为NSWeekCalendarUnitinUnit参数为NSYearCalendarUnit时,

    minimumDaysInFirstWeek属性影响它的返回值。具体说明如下:

 

       20051

                        

       --------------------------------

                                      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  

 

    20051月第一周包括1号。

    a. 如果将minimumDaysInFirstWeek设定 = 1

       fromDate传入11号,方法均返回1  ==>满足minimumDaysInFirstWeek指定的天数(最少1),所以方法将其归为2005年的第1

       fromDate传入12-8号,方法均返回2

       fromDate传入19-15号,方法均返回3

       ......

 

    b. 如果将minimumDaysInFirstWeek设定为 > 1,比如2

       fromDate传入11号,方法均返回53  ==>不足2天,所以方法将其归为2004年的第53

       fromDate传入12-8号,方法均返回1

       fromDate传入19-15号,方法均返回2

       ......

 

 

       20081

                        

       ---------------------------------

                  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  

 

    20051月第一周包括1-5号共5天。

    a. 如果将minimumDaysInFirstWeek设定为 <= 5

       fromDate传入11-5号,方法均返回1  ==>满足minimumDaysInFirstWeek指定的天数,所以方法将其归为2008年的第1

       fromDate传入16-12号,方法均返回2

       fromDate传入113-19号,方法均返回3

       ......

    b. 如果将minimumDaysInFirstWeek设定为 > 5,比如6

       fromDate传入11-5号,方法均返回53  ==> 当周不足6天,所以方法将其归为2007年的第53

       fromDate传入12-8号,方法均返回1

       fromDate传入19-15号,方法均返回2

       ......

    当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]

        的ordinalityOfUnit参数为NSWeekCalendarUnitinUnit参数为NSMonthCalendarUnit时,

        minimumDaysInFirstWeek属性影响它的返回值。以20084月为例,具体说明如下:

 

       20084

                        

       ---------------------------------

                  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  

 

 

    20084月第一周包括12345号。

    1. 如果将minimumDaysInFirstWeek设定为小于或等于5的数

       fromDate传入41-5号,方法均返回1

       fromDate传入46-12号,方法均返回2

       fromDate传入413-19号,方法均返回3

       ....

    2. 如果将minimumDaysInFirstWeek设定为大于5的数

       fromDate传入1-5号,方法均返回0

       fromDate传入6-12号,方法均返回1

       fromDate传入13-19号,方法均返回2

       ....

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

其他方法的说明
    - (NSRange)maximumRangeOfUnit:(NSCalendarUnit)unit;
    返回单元的最大范围。就Gregorian来说有:
     NSEraCalendarUnit => 0 - 2
     NSYearCalendarUnit => 1 - 10000
     NSMonthCalendarUnit = 1 - 12
     NSDayCalendarUnit = 1 - 31
     NSHourCalendarUnit = 0 - 24
     NSMinuteCalendarUnit = 0 - 60
     NSSecondCalendarUnit = 0 - 60
     NSWeekCalendarUnit = 1 - 53
     NSWeekdayCalendarUnit = 1 - 7
     NSWeekdayOrdinalCalendarUnit = ? (2147483647 - 2147483647)
                                         (NSNotFound - NSNotFound)

    - (NSRange)minimumRangeOfUnit:(NSCalendarUnit)unit;
    返回单元的最小范围。就Gregorian来说有:
     NSEraCalendarUnit => 0 - 2
     NSYearCalendarUnit => 1 - 10000
     NSMonthCalendarUnit = 1 - 12
     NSDayCalendarUnit = 1 - 28  ***
     NSHourCalendarUnit = 0 - 24
     NSMinuteCalendarUnit = 0 - 60
     NSSecondCalendarUnit = 0 - 60
     NSWeekCalendarUnit = 1 - 52  ***
     NSWeekdayCalendarUnit = 1 - 7
     NSWeekdayOrdinalCalendarUnit = ? (2147483647 - 2147483647)
                                         (NSNotFound - NSNotFound)

    - (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
    返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的顺序,比如:
    . 要取得2008/11/12在当月的第几周则可以这样调用该方法:
      [calendar ordinalityOfUnit:NSWeekOrdinalCalendarUnit inUnit: NSWeekCalendarUnit forDate: someDate]; 
      : someDate存放了2008/11/12

    . 要取得1:50分在一天中处于第几个小时,则可以这样调用该方法:
      [calendar ordinalityOfUnit:NSHourCalendarUnit inUnit: NSDayCalendarUnit forDate: someTime]; 
      : someTime存放了1:50

    . 其它请参照firstWeekdayminimumDaysInFirstWeek中的说明


    - (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
    返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的范围,比如:
    . 要取得2008/11/12在所在月份的日期范围则可以这样调用该方法:
      [calendar ordinalityOfUnit:NSDayCalendarUnit inUnit: NSMonthCalendarUnit forDate:fDate]; 
      则返回1-31。注: fDate存放了2008/11/12

    . 要取得2008/02/20在所在月份的日期范围则可以这样调用该方法:
      [calendar ordinalityOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:fDate]; 
      则返回1-29。注: fDate存放了2008/11/12

 

    - (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)sDate interval:(NSTimeInterval *)unitSecs forDate:(NSDate *)date;
    用于返回日期date(参数)所在的那个日历单元unit(参数)的开始时间(sDate)。其中参数unit指定了日历单元,参数sDate用于返回日历单元的第一天,参数unitSecs用于返回日历单元的长度(以秒为单位),参数date指定了一个特定的日期。
    如果startDateinterval均为可计算的,那么函数返回YES否则返回NO.比如:

    . 要计算2008/01/08日所在的周的第一天:
        ...
        NSDate *dateOut = [NSDate date];
        NSDate **sDate = &dateOut;
 
        NSDateComponents *dc = [[NSDateComponents alloc] init];
        [dc setYear: 2008];
        [dc setMonth: 1];
        [dc setDay: 8];
       
        NSDate *date = [calendar dateFromComponents:dc];
        NSTimeInterval intOut;
        NSTimeInterval *intervalOut = &intOut;
 
        if ([calendar rangeOfUnit:NSMonthCalendarUnit startDate:sDate interval:interval0 forDate:date]){
            NSLog(@"%@", [*sDate description]);
            NSLog(@"%f", *intervalOut);
        }
        else{
            NSLog(@"Can not be calculated!");
        }
        ...
      在控制台窗口上可以看到:
      2008-01-06 00:00:00 +0800
      604800.000000
      : 2008-01-062008/01/08所在周的第一天,604800是一周7天的秒数。     

    . 要计算2008/01/05日所在的周的第一天,在控制台窗口上可以看到:
      2007-12-30 00:00:00 +0800
      604800.000000

    . 要计算2008/02/06日所在的月的第一天,在控制台窗口上可以看到:
      2007-02-01 00:00:00 +0800
      2505600.000000
      : 2505600是二月29天的秒数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值