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);