NSValue 能够把各种类型的数据包装为对象,NSNumber 其实是它的子类
一、把系统自带结构体包装成NSValue类型的对象
如果我们想把结构体放到集合中,就需要把结构体包装成OC对象:
[NSValue valueWithRange:<#(NSRange)#>];
[NSValue valueWithPoint:<#(NSPoint)#>];
[NSValue valueWithSize:<#(NSSize)#>];
[NSValue valueWithRect:<#(NSRect)#>];
二、把 NSValue 对象还原成结构体
[value rangeValue];
[value pointValue];
[value sizeValue];
[value rectValue];
三、把任何类型包装成NSValue类型的对象
例举:
typedef struct{
int year;
int month;
int day;
}Date;
Date date = {2003,10,17};// 要包装的数据
char *type = @encode(Date);// 把数据的类型转换成字符串
// 包装成NSValue对象
NSValue *myDate = [NSValue valueWithBytes:&date objCType:type];
四、如何解包
Date date1;// 存储数据的变量
[myDate getValue:&date1];// 取出包装的结构体,并赋值给date1
NSDate 是用来表示日期和时间的类
一、创建
1.当前时间:
NSDate *date = [NSDate date];// date 是执行这行代码时的时间
NSLog(@"%@",date);// 打印date时默认打印格林尼治时区的时间
date = [NSDate dateWithTimeIntervalSinceNow:10];// 比现在的时间快10秒的时间(未来的时间)
date = [NSDate dateWithTimeIntervalSince1970:1000];//以1970年初零点为基准,n秒后的时间
date = [NSDate dateWithTimeIntervalSinceReferenceDate:1000];// 以2001年初零点为基准,n秒后的时间
NSDate *date2 = [NSDate dateWithTimeInterval:10 sinceDate:date];// 以某个时间为基准,n秒后的时间
// 表示date这个时间晚10秒钟的那个时间
date = [NSDate distantFuture];// 遥远未来的某一天
date2 = [NSDate distantPast];// 遥远过去的某一天
二、日期格式的字符串
在手机上显示日期需要转换成字符串,可以按照指定的格式转换
1. 需要一个日期格式类:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
2. 设置格式:
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
大写M代表月,小写m代表分钟,大写H代表24小时制时间,小写h代表12小时制时间
NSDate *date = [NSDate date];
3. 根据格式把日期转换成字符串
NSString *str = [formatter stringFromDate:date];// 把date转换成字符串
4. 根据格式把字符串转换成日期:
NSDate *date1 = [formatter dateFromString:str];
如果字符串的日期格式不同,就设置一个相应的dateFormat
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];// 设定一个对象
NSString *str = @"2008/08/08 08:08";// 某种格式的日期和时间
formatter.dateFormat = @"yyyy/MM/dd HH:mm";// 设置对应的格式
NSDate *date = [formatter dateFromString:str];// 就可以转换成NSDate对象了
NSLog(@"%@",date);// 查看返回的日期 |
|