NSDate的计算问题,日期计算,时区问题,NSTimer

移动开发 iOS
本文介绍了NSDate的计算问题,日期计算,时区问题,NSTimer等问题的具体使用方法和注意事项。

一.NSDate的计算问题  

NSTimeInterval 是一个以秒为单位的时间片。

1.可以用initWithTimeIntervalSinceNow方法传入一个NSTimeInterval对象,创建一个NSDate对象。

 

  1. NSDate * tomorrow =[[NSDate alloc]initWithTimeIntervalSinceNow:24*60*60]; 
  2. SDate * yesterday = [[NSDate alloc]initWithTimeIntervalSinceNow:-24*60*60];  

 

2.可以使用+dateWithTimeIntervalSinceNow:方法来创建一个NSDate对象

 

  1. NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-24*60*60]; 
  2. SDate * tomorrow = [NSDate dateWithTimeIntervalSinceNow:24*60*60];  

 

3.使用-dateByAddingTimeInterval方法创建NSDate对象

 

  1. NSDate * now = [NSDate date]; 
  2. NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60]; 
  3. NSDate * anHourAfter = [now dateByAddingTimeInterval:60*60];  

 

二、日期的比较

1.日期可以进行比较以确定大小或相等,也可以确定两个日期之间的时间间隔。两个日期的间隔时间差可以使用-timeIntervalSinceDate:方法来计算

 

  1. NSDate * now = [NSDate date]; 
  2. NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60]; 
  3. NSTimeInterVal timeBetween = [now timeIntervalSinceDate:anHourAgo]; 
  4. NSLog(@”%f”,timeBetween);  

 

2.日期比较也可以使用-timeIntervalSinceNow方法获取和当前的时间间隔

 

  1. NSDate * anHourago = [NSDate dateWithTimeIntervalSinceNow;-60*60]; 
  2. NSTimeInterval interval = [anHourAgo timeIntervalSinceNow]; 
  3. NSLog(@”%f”,interval);  

 

3.NSDate还提供了-laterDate、-earlierDate和compare方法来比较日期

 

  1. NSDate * now = [NSDate date]; 
  2. NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60]; 
  3. NSDate *result1 = [now laterDate:anHourAgo]; 
  4. NSDate * result2 = [now earlierDate:anHourAgo]; 
  5. NSComparisonResult result3 = [now compare:anHourAgo];  

 

三、时区问题:

1.  处理日期和时间经常遇到的一个问题计算时区问题。Foundation框架提供NSTimeZone来指定日 历对象的时区。+knowTimeZoneNamespace可以列举出所有时区;+timeZoneWithName可以指定名称参数创建一个时 区;+timeZoneWithAbbreviation可以指定时区缩写创建一个时区

 

  1. NSTimeZone * zone1 = [NSTimeZone timeZoneWithAbbreviation:@”PRC”]; 
  2. STimeZone * zone2 = [NSTimeZone timeZoneWithName:@”Asia/Shanghai”];  

 

2.  如果需要获取指定时区的时间字符串需要搭配NSDateFormatter来使用。NSDateFormatter可以将NSDate对象转换成所需的日期字符串

 

  1. NSDateFormatter *formatter = [[NSDateFormatter alloc]init];//分配内存,用以存放日期格式 
  2. [formatter setDateFormat:@”yyyy-MM-dd hh-mm-ss”];//定义格式 
  3. NSString * locationString = [formatter stringFromDate:[NSDate date]];//日期输出出来,用字符串进行接收 

 

3.使用NSDateFormatter可以将字符串转换成NSDate类型。同样需要注意格式的问题。

 

  1. NSDateFormatter * formatter = [[NSDateFormatter alloc]init]; 
  2. [formatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”]; 
  3. NSString * dateStr = @”2013-04-25 16:23:55”; 
  4. 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的使用示例

 

  1.  NSTimer *timer=[NSTimer  scheduledTimerWithTimeInterval: 1.0 target : self  selector:@selector(showTime:)useInfo:nil repeat:NO]; 
  2. -(void)showTime:(NSTimer *)theTimer{ 
  3. NSDateFormatter * formatter = [[NSDateFormatter alloc]init]; 
  4.    [formatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”]; 
  5.    NSString * date = [formatter stringFromDate:[NSDate date]]; 
  6.    if([date isEqualToString:@”2013-04-25 16:46:10”]) 
  7. [timer invalidate]; 
  8. NSLog(@”date:%@”,date); 
  9. }  

 

责任编辑:闫佳明 来源: oschina
相关推荐

2019-09-20 08:47:57

DockerLinux软件

2013-08-21 10:46:02

DatePicker时区

2012-06-15 11:18:07

云安全云计算

2011-07-22 10:06:44

云计算成本

2013-04-02 11:07:16

2010-05-06 17:48:50

云计算

2009-10-15 11:23:17

云计算

2018-10-10 21:00:50

2012-08-21 10:17:04

2010-09-24 15:46:23

SQL查询

2013-12-19 09:49:42

云计算集成云集成云连接器

2010-06-09 08:10:49

2011-07-01 09:46:44

云计算迁移

2022-01-14 11:48:39

量子计算硬件技术

2020-08-27 15:16:28

边缘计算

2020-03-03 09:28:30

Python内存开发

2012-07-30 09:49:44

云计算

2012-12-12 15:19:32

云安全

2013-07-23 10:13:17

2010-11-17 10:14:35

点赞
收藏

51CTO技术栈公众号