最近一個項目中,在做一個營業時間倒計時的功能中,用到對時間日期特殊處理比較多,雖然不難,但也是幾經周轉把這個功能給完美的實現了。里面用到頗多的對時間日期的特殊處理,把它們歸納成單一的方法,總結如下:
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、說一下我在營業時間倒計時的實現思路,具體的就不上代碼了,每個人的實現方式都不一樣。項目截圖如下
要實現的效果是用戶可以在一天中任意設置營業時間段,營業開始的時間和營業結束的時間,開始和結束的時間可以處於同一天也可跨一天,比如營業開始時間8點,營業結束時間1點,那么這個結束時間就是第二天凌晨1點了。用戶還可以實時切換營業狀態:休息—營業。如果當前時間段處於營業時間內,則不需要顯示倒計時,只顯示營業時間段就好了。如果當前時間不處於營業范圍時間內,則需要顯示時分秒的倒計時。
我的思路是:
a、拿到營業開始時間和營業結束時間,先判斷營業時間段是否跨天,如果開始小於結束則不跨天,反之結束時間是在第二天(注:開始時間永遠是處於當天)
b、把營業時間(一般是字符串)轉換成具體的日期對象NSDate
c、判斷當前時間是否處於營業范圍內
d、如果不處於,則計算當前時間離營業開始時間的間隔(上面第三點有方法),這里轉換成了秒數,添加定時器用這個秒數做倒計時,最后轉換成時分秒顯示
