類似這樣的代碼片段總是記得不是很清楚,所以今天給整理下,以后自己也可以自己也可以直接拿來使用。其實要是自己直接給寫出來,還是要廢一點腦細胞的。
- (NSString *)convertTime:(long long )time{
// 今天 11:20 或 剛剛 幾分鐘前 幾小時前
// 昨天 23:23
// 2016-05-12 11:11
// 1. 創(chuàng)建一個日歷對象
NSCalendar *calendar = [NSCalendar currentCalendar];
// 2. 獲取當前時間
NSDate *currentDate = [NSDate date];
// 3. 獲取當前時間的年月日
NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute fromDate:currentDate];
NSInteger currentYear = components.year;
NSInteger currentMonth = components.month;
NSInteger currentDay = components.day;
NSInteger currentHour = components.hour;
NSInteger currentMinute = components.minute;
// 4. 獲取發(fā)送時間
NSDate *sendDate = [NSDate dateWithTimeIntervalSince1970:time/1000];
// 5. 獲取發(fā)送時間的年月日
NSDateComponents *sendComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute fromDate:sendDate];
NSInteger sendYear = sendComponents.year;
NSInteger sendMonth = sendComponents.month;
NSInteger sendDay = sendComponents.day;
NSInteger sendHour = sendComponents.hour;
NSInteger sendMin = sendComponents.minute;
NSDateFormatter *fmt = [[NSDateFormatter alloc]init];
// 6. 當前時間與發(fā)送時間的比較
if (currentYear == sendYear &&
currentMonth == sendMonth &&
currentDay == sendDay) {// 今天
if (currentHour == sendHour && currentMinute == sendMin) {//時分相同
fmt.dateFormat = @"剛剛";
}else if(currentHour == sendHour && currentMinute != sendMin){//時同分不同
NSInteger minuteInterval = currentMinute - sendMin;
NSString *fmtString = [NSString stringWithFormat:@"%ld分鐘前",minuteInterval];
fmt.dateFormat = fmtString;
}else if (currentHour != sendHour){//相差多少小時
NSInteger hourInterval = currentHour - sendHour;
NSString *fmtString = [NSString stringWithFormat:@"%ld小時前",hourInterval];
fmt.dateFormat = fmtString;
}
//如果想用今天 11:20 這種形式,只要將剛剛,幾分鐘前,幾個小時前這幾行代碼給注釋,開啟這行代碼就可以了。
//fmt.dateFormat = @"今天 HH:mm";
}else if(currentYear == sendYear &&
currentMonth == sendMonth &&
currentDay == sendDay + 1){
fmt.dateFormat = @"昨天 HH:mm";
}else{
fmt.dateFormat = @"yyyy-MM-dd HH:mm";
}
return [fmt stringFromDate:sendDate];
}
再看一下如何模擬測試一下這個代碼片段邏輯是否正確,調用形式如下:
//獲取系統(tǒng)當前時間的時間戳
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval a = [date timeIntervalSince1970]*1000;
//60 * 60 * 2 表示兩個小時,1000只是一個系數(shù)
NSString *timeStr2 = [self convertTime:a - 1000 * 60 * 60 * 2 ];
NSLog(@"%@",timeStr2);
順便提下如何把時間戳轉為當前時間:
NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:a/1000 + 8 **60 * 60];