今天的课程的主要内容是关于NSDate、Category、Extension的使用
一、NSDate
NSDate是用于处理日期和时间的基础类,封装了某一给定的时刻。
NSDate *nowtime = [ NSDate date ]; //获取系统当前时间
NSLog(@"当前时间是%@",nowtime);
注意获取系统当前时间是格林尼治时间,也就是0时区的时间和日期。北京是东8区,与0时区相差8个区域,即8个小时,一个时区是1个小时。
//如何表达中国时间
NSDate *chinatime = [ NSDate alloc] initWithTimeIntervalSinceNow:8*60*60];
NSLog(@"当前的中国时间是%@",chinatime);
//initWithTimeIntervalSinceNow表示从这个初始化方法传入一个时间段,计算当前0时区时间距离这个时间段的时间间隔的时间。将这个时间段设置成8*60*60刚好是从北京时区到0时区的所有以秒为单位的时间间隔。
//为了方便使用,我们可以使用宏定义的方法如图所示
将宏定义写在main函数的上方,便于我们使用,同时代码可以写成
NSDate *chinatime = [ NSDate alloc] initWithTimeIntervalSinceNow:BeiJing];
NSLog(@"当前的中国时间是%@",chinatime);//输出结果为当前的北京时间
同理,我们利用宏定义也可以写出明天和昨天的当前时间
#define Yesterday -24*60*60
#define Tomorrow 24*60*60
//明天的当前时间
NSDate *tomtime = [[NSDate alloc]initWithTimeIntervalSinceNow:Tomorrow]
//昨天的当前时间
NSDate *yestime = [[NSDate alloc]initWithTimeIntervalSinceNow:Yesterday]
//求从昨天到明天的时间差值
NSTimeInterval intertime = [tomtime timeIntervalSinceDate:yestime] ;
NSLog(@"从昨天到明天的时间差值是%.4f",intertime);
//typedef double NSTimeInterval; NSTimeInterval是一个用typedef定义的新的double类型的别名,用以表示以秒为单位的时间间隔。timeIntervalSinceDate:该方法表示从前个时间点到后一个时间点的时间间隔
练习:随意确定一个时间,求从当前时间到这个时间的时间间隔是否小于60秒,如果是输出“刚刚”,如果时间间隔在60秒和3600秒之间,就输出多少分钟前,如果大于3600秒就输出多少小时前。
NSDate *fixedtime = [NSDate alloc]initWithTimeIntervalSinceNow:BeiJing];
NSDate *fixedtime1 = [[NSDate alloc]initWithTimeIntervalSinceNow:BeiJing+Tomorrow];
NSTimeInterval *time = [fixedtime1 timeIntervalSinceNow: fiexdtime];//timeIntervalSinceNow:此处只能是从明天到现在的时间差,不能是从现在到明天的时间差,否则,在控制台输出“刚刚”
if(time < 60){
NSLog(@"刚刚");
}
//求到1970-01-01 00:00:00多少秒之后的时间
NSDate *time = [[NSDate alloc]initWithTimeIntervalSince1970:60*60];
NSLog(@" %@ ",time);//控制台输出是1970-01-01 10:00:00
计算从现在间隔指定时间段之后的日期
NSDate *time = [NSDate dateWithTimeInterval:2*Tomorrow sinceDate:[NSDate date]];
//[NSDate date]是当前系统时间
NSLog(@“当前时间是%@”,[NSDate date]);//输出当前时间
NSLog(@"指定日期是%@",time);//输出指定日期
控制台输出为:
当前时间是2015-11-12 17:05:00
指定日期2015-11-14 17:05:00
设置转化格式
//DateFormatter是iOS的日期格式方法,功能是实现NSString 和 NSDate 的互转
常见的时间格式化字符串如下:
y 年
M 年中的月份
d 月份中的天数
H 一天中的小时数
m 小时中的分钟数
s 分钟中的秒
NSDateFormatter *fornatter = [[NSDateFormatter alloc] init ];//创建一个NSDateFormatter类型的对象;
在此句也可理解为创建一个空的格式转化器;
[formatter setDateFormat:@"MM-dd-yyyy"];//将转换格式添加到格式转换器中
NSTimeZone *zone1 = [NSTimeZone timezoneWithName:@"Asia/Shanghai"];//创建一个时区的对象;
[formatter setTimeZone: zone1];//在这句中将时区添加到格式转化中
//将NSString类型的日期转换为NSDate的日期
NSDateFormatter *time = [[ NSDateFormatter alloc] init ];
[time setDateFormat:@"yyyy-MM-dd HH:mm:ss" ];
NSString *date=@"1994-10-08 12:00:00";
NSDate *birth=[time dateFromString:date];
NSLog(@"%@",birth);//输出转换后的时间
二、类的扩展
category也叫类目,主要作用是给看不到的源代码(苹果提供的系统类)的类添加方法,category添加的方法会成为原有的类的一部分,从而扩展一个类的新功能
Extension 主要作用是管理类的私有方法。在设计一个类的时候,有些方法需要公开(我们称之为接口),有些方法仅仅是内部使用。Extension的功能是帮我们去管理内部使用的方法(私有方法)
protocol(协议)代理必须遵循协议的方法,也是用来扩展类的方法