一.NSDate的计算问题
NSTimeInterval 是一个以秒为单位的时间片。
1.可以用initWithTimeIntervalSinceNow方法传入一个NSTimeInterval对象,创建一个NSDate对象。
- NSDate * tomorrow =[[NSDate alloc]initWithTimeIntervalSinceNow:24*60*60];
- SDate * yesterday = [[NSDate alloc]initWithTimeIntervalSinceNow:-24*60*60];
2.可以使用+dateWithTimeIntervalSinceNow:方法来创建一个NSDate对象
- NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
- SDate * tomorrow = [NSDate dateWithTimeIntervalSinceNow:24*60*60];
3.使用-dateByAddingTimeInterval方法创建NSDate对象
- NSDate * now = [NSDate date];
- NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60];
- NSDate * anHourAfter = [now dateByAddingTimeInterval:60*60];
二、日期的比较
1.日期可以进行比较以确定大小或相等,也可以确定两个日期之间的时间间隔。两个日期的间隔时间差可以使用-timeIntervalSinceDate:方法来计算
- NSDate * now = [NSDate date];
- NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60];
- NSTimeInterVal timeBetween = [now timeIntervalSinceDate:anHourAgo];
- NSLog(@”%f”,timeBetween);
2.日期比较也可以使用-timeIntervalSinceNow方法获取和当前的时间间隔
- NSDate * anHourago = [NSDate dateWithTimeIntervalSinceNow;-60*60];
- NSTimeInterval interval = [anHourAgo timeIntervalSinceNow];
- NSLog(@”%f”,interval);
3.NSDate还提供了-laterDate、-earlierDate和compare方法来比较日期
- NSDate * now = [NSDate date];
- NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60];
- NSDate *result1 = [now laterDate:anHourAgo];
- NSDate * result2 = [now earlierDate:anHourAgo];
- NSComparisonResult result3 = [now compare:anHourAgo];
三、时区问题:
1. 处理日期和时间经常遇到的一个问题计算时区问题。Foundation框架提供NSTimeZone来指定日 历对象的时区。+knowTimeZoneNamespace可以列举出所有时区;+timeZoneWithName可以指定名称参数创建一个时 区;+timeZoneWithAbbreviation可以指定时区缩写创建一个时区
- NSTimeZone * zone1 = [NSTimeZone timeZoneWithAbbreviation:@”PRC”];
- STimeZone * zone2 = [NSTimeZone timeZoneWithName:@”Asia/Shanghai”];
2. 如果需要获取指定时区的时间字符串需要搭配NSDateFormatter来使用。NSDateFormatter可以将NSDate对象转换成所需的日期字符串
- NSDateFormatter *formatter = [[NSDateFormatter alloc]init];//分配内存,用以存放日期格式
- [formatter setDateFormat:@”yyyy-MM-dd hh-mm-ss”];//定义格式
- NSString * locationString = [formatter stringFromDate:[NSDate date]];//日期输出出来,用字符串进行接收
3.使用NSDateFormatter可以将字符串转换成NSDate类型。同样需要注意格式的问题。
- NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
- [formatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”];
- NSString * dateStr = @”2013-04-25 16:23:55”;
- NSDate * date = [formatter dateFromString:dateStr];//把字符串转换成Date格式
最后,不能为任意日期格式的字符串创建NSDateFormatter对象。
四、NSTimer
1. NSTimer是Cocoa中比较常用的定时器类,它可以完成定时功能。使用NSTimer需要记住三要素:
---时间间隔NSTimeInterval为浮点型
---事件代理delegate
---事件处理方法@selector
2.常使用+scheduledTimerWithTimeInterval: target: selector: userInfo: repeat: 方法创建
参数说明:
--Interval设定x秒后启动定时器;
--target参数是指执行第三个参数方法的对象
--selector指定了定时器触发调用的方法;
--userInfo指定了定时器的用户信息,可以设置成nil,也可以通过这个参数传值
--repeat参数如果设置成YES,定时器将会按照预定的时间重复执行,如果设置成NO,定时器对象启动一次后不再重复执行。
NSTimer的使用示例
- NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval: 1.0 target : self selector:@selector(showTime:)useInfo:nil repeat:NO];
- -(void)showTime:(NSTimer *)theTimer{
- NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
- [formatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”];
- NSString * date = [formatter stringFromDate:[NSDate date]];
- if([date isEqualToString:@”2013-04-25 16:46:10”])
- [timer invalidate];
- NSLog(@”date:%@”,date);
- }