1. 程式人生 > >將時間戳轉換為時間,並輸出“剛剛”、“昨天”、“XX小時前”等

將時間戳轉換為時間,並輸出“剛剛”、“昨天”、“XX小時前”等

我們在開發iOS程式中需要有介面,有時候藉口提供的時間是NSNumber型別的並且是時間戳。比如說:1447375370 其實這個意思就是1970年0點到當前時間的秒數。

看到這裡,大概我們心裡就有數了。為了方便程式設計中使用,我們寫成NSString的類目(Category),這樣可以通過以下方式直接呼叫即可:
NSString *resultStr = [NSString stringWithTimeStamp:<#此處需要NSNumber型別的時間戳#>];

好了,上程式碼
NSString+TimeString.h

#import <Foundation/Foundation.h>

@interface
NSString (TimeString) /**將時間戳轉換為時間*/ + (NSString *)stringWithTimeStamp:(NSNumber *)timeStamp; @end

NSString+TimeString.m

#define anHour  3600
#define aMinute 60

#import "NSString+TimeString.h"

@implementation NSString (TimeString)

+ (NSString *)stringWithTimeStamp:(NSNumber *)timeStamp {
    //獲取當前時間
NSDate *currentDate = [NSDate date]; //將當前時間轉化為時間戳 NSTimeInterval currentDateStamp = [currentDate timeIntervalSince1970] + 8 * anHour; //將傳入的引數轉化為時間戳 double dateStamp = [timeStamp doubleValue] + 8 * anHour; //計算時間間隔,即當前時間減去傳入的時間 double interval = currentDateStamp - dateStamp; //獲取當前時間的小時單位(24小時制)
NSDateFormatter *formatter = [NSDateFormatter new]; [formatter setDateFormat:@"H"]; int nowHour = [[formatter stringFromDate:currentDate] intValue]; //獲取當前時間的分鐘單位 NSDateFormatter *minFormatter = [NSDateFormatter new]; [minFormatter setDateFormat:@"m"]; int nowMinute = [[minFormatter stringFromDate:currentDate] intValue]; //今天0點的時間戳 double todayZeroClock = currentDateStamp - anHour * nowHour - aMinute * nowMinute; //時間格式化,為輸出做準備 NSDateFormatter *outputFormat = [NSDateFormatter new]; [outputFormat setDateFormat:@"M月d日"]; //進行條件判斷,滿足不同的條件返回不同的結果 if (interval < 30 * aMinute) { //在30分鐘之內 return @"剛剛"; } else if (todayZeroClock - dateStamp > 24 * anHour) { //已經超過兩天以上 return [outputFormat stringFromDate:[NSDate dateWithTimeIntervalSince1970:dateStamp]]; } else if (todayZeroClock - dateStamp > 0) { //已經超過一天(昨天) return @"昨天"; } else if (interval < anHour) { //一個小時之內 return [NSString stringWithFormat:@"%.0f分鐘前", (currentDateStamp - dateStamp) / aMinute]; } else { //今天之內 return [NSString stringWithFormat:@"%.0f小時前", (currentDateStamp - dateStamp) / anHour]; } } @end