最近一个项目中,在做一个营业时间倒计时的功能中,用到对时间日期特殊处理比较多,虽然不难,但也是几经周转把这个功能给完美的实现了。里面用到颇多的对时间日期的特殊处理,把它们归纳成单一的方法,总结如下:

 

1、把秒数转换为 小时:分:秒

1 - (NSString *)timeFormatted:(int)totalSeconds
2 {
3     
4     int seconds = totalSeconds % 60;
5     int minutes = (totalSeconds / 60) % 60;
6     int hours = totalSeconds / 3600;
7     
8     return [NSString stringWithFormat:@"%02d:%02d:%02d",hours, minutes, seconds];
9 }

2、把日期转换成当前时区的日期

1 -(NSDate *)convertDateToLocalTime: (NSDate *)forDate {
 2     
 3     NSTimeZone *nowTimeZone = [NSTimeZone localTimeZone];
 4     
 5     NSInteger timeOffset = [nowTimeZone secondsFromGMTForDate:forDate];
 6     
 7     NSDate *newDate = [forDate dateByAddingTimeInterval:timeOffset];
 8 
 9     return newDate;
10     
11 }

 

 

3、计算当前时间与某个指定时间的时间差

1 - (double)intervalSinceNow: (NSString *) theDate
 2 {
 3     //设置日期时间格式为:yyyy-MM-dd HH:mm:ss
 4     NSDateFormatter *date=[[NSDateFormatter alloc] init];
 5     [date setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
 6     
 7     //把指定的时间字符串转换位NSDate对象
 8     NSDate *d=[date dateFromString:theDate];
 9     //转换成当前时区的时间,方法convertDateToLocalTime:位于上面第二点
10     NSDate *ds = [self convertDateToLocalTime:d];
11     
12     //获得指定时间相对于世间戳的秒数间隔
13     NSTimeInterval late=[ds timeIntervalSince1970]*1;
14     
15     //创建当前时间
16     NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
17     NSDate *new = [self convertDateToLocalTime:dat];
18   
19     //获得当前时间相对于世间戳的秒数间隔
20     NSTimeInterval now=[new timeIntervalSince1970]*1;
21    
22     
23     NSTimeInterval cha=now-late;
24     
25     return cha;
26 }

4获得指定时间的前一天或后一天

1  //拿到第二天年月日
2     NSTimeInterval  oneDay = 24*60*60*1;  //1天的长度
3     NSDate * nextDate = [[NSDate date] initWithTimeIntervalSinceNow: +oneDay];//前一天就是把加号变成减号
4     NSString *nextStrDate = [dateFormatter stringFromDate:nextDate];
5       NSLog(@"nextStrDate%@", nextStrDate);

 

5,NSDateFormatter 最常用的用法

这个类在日期处理中使用频率是特别高的总的来说是用来设置一种你想要的日期格式,使日期转换成你想要格式的字符串,使字符串转换成你想要格式的日期

里面用到两个核心的方法:

- (NSString *)stringFromDate:(NSDate *)date;

- (NSDate *)dateFromString:(NSString *)string;

a、日期转字符串

 

1 //拿到当前年月日
2     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
3     //设置要转换的格式
4     [dateFormatter setDateFormat:@"yyyy-MM-dd"];
5     //把当前的日期转换成字符串
6     NSString *strDate = [dateFormatter stringFromDate:[NSDate date]];
7     //打印结果2015-07-02
8     NSLog(@"strDate%@", strDate);

b、字符串转为日期对象NSDate

//拿到当前年月日
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //设置要转换的格式
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    //要转换的字符串
    NSString *strDate = @"2015-7-2 09:12:38";
    //把字符串转换成日期对象
    NSDate *date = [dateFormatter dateFromString:strDate];
    NSLog(@"date%@", date);

 

6、说一下我在营业时间倒计时的实现思路,具体的就不上代码了,每个人的实现方式都不一样。项目截图如下

                                          

iOS开发 时钟秒表倒计时 苹果秒针倒计时_时间段

 

要实现的效果是用户可以在一天中任意设置营业时间段,营业开始的时间和营业结束的时间,开始和结束的时间可以处于同一天也可跨一天,比如营业开始时间8点,营业结束时间1点,那么这个结束时间就是第二天凌晨1点了。用户还可以实时切换营业状态:休息—营业。如果当前时间段处于营业时间内,则不需要显示倒计时,只显示营业时间段就好了。如果当前时间不处于营业范围时间内,则需要显示时分秒的倒计时。

我的思路是:

a、拿到营业开始时间和营业结束时间,先判断营业时间段是否跨天,如果开始小于结束则不跨天,反之结束时间是在第二天(注:开始时间永远是处于当天)

b、把营业时间(一般是字符串)转换成具体的日期对象NSDate

c、判断当前时间是否处于营业范围内

d、如果不处于,则计算当前时间离营业开始时间的间隔(上面第三点有方法),这里转换成了秒数,添加定时器用这个秒数做倒计时,最后转换成时分秒显示