OC中的NSDate日期类和Foundation框架中的结构体相关操作

一:NSDate

NSDate可以⽤用来表⽰示时间,可以进⾏行⼀一些常见的⽇日期\时间处理 • ⼀一个NSDate对象就代表⼀一个时间
• [NSDate date]返回的就是当前时间

1)日期对象的格式化操作

        // 1,获取当前时间
//        NSDate *date = [NSDate date];
//        NSLog(@"date = %@", date);
//        
//        // 格式化输出时间
////           y : 年
////        // M : 月
////        // d : 日
////        // h : 小时(12小时计时法)
////        // H : 小时 (24时计时法)
////        // m : 分钟
////        // s : 秒
//
//        // 2,创建一个格式化器
//        NSDateFormatter *format = [[NSDateFormatter alloc] init];
//        format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
//        
//        // 3,进行格式化
//        NSString *str = [format stringFromDate:date];
//        NSLog(@"%@", str);
        

2)字符串转换成日期对象

// 1,创建日期字符串
//        NSString *strDate = @"2011-11-11 11:11:11";
//        
//        // 2,创建格式化器
//        NSDateFormatter *format = [[NSDateFormatter alloc] init];
//        // 2.1,设置格式,这里一定要跟上面格式保持一致.否则容易出错
//        format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
//        
//        // 3,将字符串转换成日期格式
//        NSDate *date = [format dateFromString:strDate];
//        NSLog(@"%@", date);
        
        //---------借助NSCalendar对象来获取日期的每一部分------------------
        
        // 创建一个NSCalendar对象
//        NSCalendar *calendar = [NSCalendar currentCalendar];
//        // 创建一个当前日期对象
//        NSDate *date = [NSDate date];
//        
//        // 获取当前日期的年份
//        NSCalendarUnit unit = NSCalendarUnitYear;
//       NSDateComponents *year = [calendar  components:unit fromDate:date];
//        NSLog(@"年:%ld", year.year);
        

3)两个字符串日期的比较操作

        NSString *strDate1 = @"2008-05-20 10:15:30";
//        NSString *strDate2 = @"2008-05-12 14:20:38";
//        
//        // 把字符串格式的日期转换成日期对象
//        NSDateFormatter *format = [[NSDateFormatter alloc] init];
//        format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
//        
//        NSDate *date1 = [format dateFromString:strDate1];
//        NSDate *date2 = [format dateFromString:strDate2];
//        
//        // 创建NSCalendar对象
//        NSCalendar *calendar = [NSCalendar currentCalendar];
//        NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
//        NSDateComponents *comp = [calendar components:unit fromDate:date2 toDate:date1 options:0];
//        
//        NSLog(@"%ld, %ld, %ld", comp.year, comp.month, comp.day);

注意:日期操作涉及到的类有:NSDate、NSDateFormatter和NSCalendar

 

二:Foundation框架下得结构体操作

        // ========Foundation框架中常用的四种结构体
        // NSRange 表示字符串中含有某个字符串的范围  属性值location, length
        // NSPoint == CGPoint 表示二维空间中一个坐标点 属性值:x,y
        // NSSize == CGSize 表示一个UI控件的尺寸 属性值:width,height
        // NSRect == CGRect 表示UI控件坐标点和尺寸大小 属性值:CGPoint、CGSize
        
        // 四种结构体用法
//        CGPoint point = CGPointMake(0, 0);
//        CGSize size = CGSizeMake(10, 10);
//        CGRect rect = CGRectMake(0, 0, 10, 10);
//        NSRange range = NSMakeRange(3, 3);
        
        // Foundation框架中利用函数把结构体转成字符串
        // 把坐标原点转换成字符串
//        NSString *strP = NSStringFromPoint(CGPointMake(0, 0));
        
        // 把尺寸转成字符串
//        NSString *strS = NSStringFromSize(CGSizeMake(10, 10));
        
        // 把位置和尺寸转换成字符串
//        NSString *strR = NSStringFromRect(CGRectMake(0, 0, 10, 10));
//        NSLog(@"%@", strR);
        
        // 比较两个点位置是否相同
//        BOOL b = CGPointEqualToPoint(CGPointMake(0, 0), CGPointMake(0, 0));
        
        // 比较两块区域是否相同
//        BOOL b = CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
        
        // 判断两个尺寸是否相同
//        BOOL b = CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
        
        // 判断一个点是否在一个区域内
//        BOOL b  = CGRectContainsPoint(<#CGRect rect#>, <#CGPoint point#>)
        
        

三:OC中基本数据类型的包装操作

1)int double char float数据类型的包装处理

        /**
         *  OC数组中只能存放OC对象,不能存放基本基本数据类型,所以为了将基本数据类型存放到OC数组中
         *  可以把基本数据类型包装成OC对象存放
         */
        // 1,基本数据int char double float数据的包装
        // NSNumber 的包装(int/double/float)
        // int包装
//        NSNumber *num1 = [NSNumber numberWithInt:10];
        
        // double/float包装
//        NSNumber *num2 = [NSNumber numberWithFloat:<#(float)#>]
//        NSNumber numberWithDouble:<#(double)#>
        
        // 快速包装方式
//        NSArray *arr = @[@100];
//        NSLog(@"%@", arr);
        
        // 将NSNumber类型转换会基本数据类型
//        NSNumber *num = [NSNumber numberWithInt:100];
//        int num1 = num.intValue;
//        NSLog(@"%d", num1);
        /**
         *  从NSNumber中取出之前包装的基本数据类型 - (char)charValue;
         - (int)intValue;
         - (long)longValue;
         - (double)doubleValue;
         - (BOOL)boolValue;
         - (NSString *)stringValue;
         */

2)Foundation框架下得结构体的包装操作

        // 2,结构体数据类型的包装
        /**
         *  NSNumber是NSValue的⼦子类,但NSNumber只能包装数字类型
         • NSValue可以包装任意值
         • 因此, 可以⽤用NSValue将结构体包装后, 加⼊入NSArray\NSDictionary中
         */
//        CGPoint point =  CGPointMake(0, 0);
//        NSValue *value = [NSValue valueWithPoint:point];
//        NSValue valueWithRange:<#(NSRange)#>
//        NSValue valueWithRect:<#(NSRect)#>
//        NSValue valueWithSize:<#(NSSize)#>
//        NSLog(@"%@", value);

3)自定义结构体的包装处理

        // 自定义结构体的包装
        
        typedef struct {
            
            int year;
            int month;
            int day;
        } Date;
        
        Date date = {2010,10,10};
        NSValue *value = [NSValue valueWithBytes:&date objCType:@encode(Date)];
        NSArray *arr = @[value];
        Date date1;
        
        NSValue *value1 = arr[0];
        [value1 getValue:&date1];
        NSLog(@"%d--%d---%d", date1.year, date1.month, date1.day);
        

 

posted @ 2014-11-14 09:34  _boy  阅读(388)  评论(0编辑  收藏  举报