首页 > 代码库 > OC中的NSDate日期类和Foundation框架中的结构体相关操作

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 = http://www.mamicode.com/[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 = http://www.mamicode.com/[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);        

 

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