黑马程序员——Foundation框架入门:NSNumber,NSValue和NSDate
2015-09-01 18:46
429 查看
———-android培训、Java培训、iOS培训,期待与您交流———-
除了上面的基本方法外还有两个快速赋值的方法:
1.NSNumber *a3 = @(a);//将变量a赋值给a3
2.NSNumber *a4 = @10;//将变量a赋值给a4
类似的还有:
等。
同样还有sizeValue、rectValue方法。
如果要显示本地时间,需要使用如下方法:
在编写时间格式时不必包括时间的每一个部分,可以只有年月没有日等。
格式化的字母含义:
yyyy-四位年份
MM-两位月份
dd-两位日期
HH-两位小时数(24小时制)
hh-两位小时数(12小时制)
mm-两位分钟数
ss-两位秒数
获取昨天这个时候的时间,接上例:
这是取巧的方法,取时间差的负值即可。
使用NSCalendar可以快速获取部分日期时间,例如年或秒。
计算两个时间点的时间差
一、NSNumber
用途:把基本数据类型的数据保存到NSArray或NSDictionary中。
赋值
int a = 10; NSNumber *a1 = [NSNumbernumberWithInt:a];//这样就可以向NSArray中添加数值变量了: NSMutableArray *arr = [NSMutableArray arrayWithObject:a1];
除了上面的基本方法外还有两个快速赋值的方法:
1.NSNumber *a3 = @(a);//将变量a赋值给a3
2.NSNumber *a4 = @10;//将变量a赋值给a4
取值
接上例:NSNumber *a2 = arr[0]; [a2 intValue]; //如果是float类型的变量,则使用floatValue: [a2 floatValue];//其他数据类型相似。
二、NSValue
NSValue包装对象指针,CGRect结构体等。一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet的实例。需要注意的是NSValue对象是不可枚举的。 简单来说,NSValue就是用来将不是对象的数据转换为对象,从而使得这些数据可以被存储在NSArray、NSDictionary等数据结合中。赋值
OC提供了多种不同数据复制到NSValue型变量的方法。例如:NSValue *v1 = [NSValue valueWithPoint:c1];//c1是已经定义的CGPointer结构体变量
类似的还有:
+(NSValue *)valueWithPoint:(NSPoint)point; +(NSValue *)valueWithSize:(NSSize)size; +(NSValue *)valueWithRect:(NSRect)rect;
等。
取值
NSPoint p1 = [v1 pointValue];
同样还有sizeValue、rectValue方法。
将自定义结构体转换为NSValue类型
typedef struct d{ int year; int month; int day; } MyDate; MyDate d1 = {2015,8,31}; NSValue *val = [NSValue valueWithBytes:&d1 objCType:@encode(MyDate)];//@encode(aType)返回一个该类型的C字符串
取出存入NSValue中的自定义结构体的值
接上例MyDate md;//由于接收从NSValue转回MyDate的数据 [val getValue:&md]; NSLog(@"%d %d%d",md.year,md.month,md.day);
三、NSDate
显示时间:
NSDate *d = [NSDate date]; NSLog(@"%@",d);//使用这种方法显示的是格林威治时间,而不是本地时间
如果要显示本地时间,需要使用如下方法:
NSDate *d = [NSDate date]; NSTimeZone *zone = [NSTimeZone systemTimeZone]; //设置时区为当前系统时区 NSInteger interval =[zone secondsFromGMTForDate: d]; //获取当前时区和0时区的时间间隔 NSDate *localeDate = [d dateByAddingTimeInterval:interval]; //重新生成时间 NSLog(@"%@",localeDate);
格式化时间
想让系统输出的时间按照需要的格式呈现就需要格式化时间,方法如下:NSDateFormatter *fmt = [NSDateFormatter new];//定义一个格式化对象,用于保存格式 fmt.dateFormat = @"yyyy年MM月dd日HH:mm:ss";//具体格式 NSString *dateStr = [fmt stringFromDate:d];//将当前时间以已经定义好的格式转换为NSString对象 NSLog(@"%@",dateStr);
在编写时间格式时不必包括时间的每一个部分,可以只有年月没有日等。
格式化的字母含义:
yyyy-四位年份
MM-两位月份
dd-两位日期
HH-两位小时数(24小时制)
hh-两位小时数(12小时制)
mm-两位分钟数
ss-两位秒数
计算时间
获取明天这个时候的时间,接上例:NSTimeInterval inter = 60*60*24;//一天的秒数 NSDate *tmr = [NSDate dateWithTimeIntervalSinceNow:inter]; dateStr = [fmt stringFromDate:tmr]; NSLog(@"%@",dateStr);
获取昨天这个时候的时间,接上例:
tmr = [NSDate dateWithTimeIntervalSinceNow:-inter];
这是取巧的方法,取时间差的负值即可。
日期时间对象NSCalendar
单独获取某个时间使用NSCalendar可以快速获取部分日期时间,例如年或秒。
NSDate *d = [NSDate date]; NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *com = [cal components:NSCalendarUnitYear|NSCalendarUnitMinute fromDate:d];//可以通过添加竖线|添加更多的时间单元 NSLog(@"%ld%ld",com.year,com.minute);
计算两个时间点的时间差
NSString *time1 = @"2015-08-21 4000 20:21:22"; NSString *time2 = @"2015-09-02 13:21:02";//设定两个时间点 NSDateFormatter *fmt = [NSDateFormatter new]; fmt.dateFormat = @"yyyy-MM-ddHH:mm:ss";//格式化时间 NSDate *d1 = [fmt dateFromString:time1]; NSDate *d2 = [fmt dateFromString:time2];//将设定的两个时间点的NSString对象转换为NSDate对象 NSCalendar *cal = [NSCalendar currentCalendar]; int unit = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;//通过整形变量保存当前时间的具体每个部分 NSDateComponents *com = [cal components:unit fromDate:d1toDate:d2 options:0]; NSLog(@"相差%ld年%ld月%ld天%ld小时%ld分钟%ld秒钟",com.year,com.month,com.day,com.hour,com.minute,com.second);
相关文章推荐
- Objective-C的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中NSLog输出格式大全
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- objective-c中生成随机数的方法
- 在Swift中使用Objective-C编写类、继承Objective-C类
- Swift能代替Objective-C吗?
- Objective-C 消息传递机制详解
- 在一个项目中同时使用Swift和Objective-C代码混合编程的方法
- vm安装mac os x 10.7 lion
- objective-c(一)
- objective-c(二)
- objective-c(三)
- objective-c(四)-基本数据类型以及循环和选择结构
- objective-c(六)文件分离,合成存取方法,方法多参数,局部变量,self使用(未完成)
- windows下objective-c的cocoa框架编程,可以有图形界面哟