我们做项目过程中经常需要获取当前系统的时间,比如当前的时钟显示,或者参与话题讨论的评论时间,或者定时售卖的商品等等,NSDate为获取系统时间的一个很重要的类,初始化一个对象后即可获得一个时间
NSDate *date1 = [NSDate date];
NSLog(@"%@",date1);
打印出来发现,此时打印出的时间不是北京时间,而是格林尼治标准时间(即0时区时间),中国为东8区,故需在此时间上增加8小时才算正确,那么如何解决时差问题呢?NSTimeZone这个类可用于解决获得系统时间导致的时差问题,具体步骤如下:
首先初始化一个对象zone,获得0时区时间
NSTimeZone *zone = [NSTimeZone systemTimeZone];
然后获得0时区时间到当前时间的时间差seconds
NSTimeInterval seconds1 = [zome secondsFromGMTForDate:date1];
将date1的时间加上seconds时间即可获得当前时间
NSDate *date2 = [date1 dateByAddingTimeInterval:seconds1];
NSLog(@"%@",date2);
```
######为了方便我们的当前时间能准确获得,而且可以根据需要进行必要的转换,NSDateFormatter类可以很方便的将时间和字符串进行转换
首先初始化一个对象
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
通过dateFormat属性转换为我们所需要的时间格式
注意字母代表的意义( y: 年 M: 月 d: 日 , h: 小时(12时间制)/ H: 小时(24时间制) m: 分 s:秒)
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
然后可以将时间转换为字符串, 此时获得的是系统当前的时间
NSString *dateStr = [formatter stringFromDate:date1];
NSLog(@"%@",dateStr);
不过,假如此时再次将字符串转换为时间, 获得的却是格林尼治时间(0时区)
NSDate *date3 = [formatter dateFromString:dateStr];
NSLog(@"%@",date3);
怀疑NSDateFormatter类的内部对时间进行了封装导致
######有时候我们需要获得在某一时间点之后的时间间隔,我们需要借助NSDate的一些系统的方法
获得1970年到现在的间隔时间方法如下:
NSTimeInterval seconds2=[date1 timeIntervalSince1970];
NSLog(@"%.0f",seconds2);
当然,如果你想获得某一个时间间隔之后的时间,可以用下面的方法
date = [date1 dateWithTimeIntervalSinceNow:100];//返回当前时间100秒后的时间,用于定时问题很方便
有时需要随机获得一个时间,下面的方法可能会用到
随机返回一个比较遥远的未来时间
date = [NSDate distantFuture];
随机返回一个比较遥远的过去时间
date = [NSDate distantPast]