實際開發中時間戳的轉化

分享一個工具類實現類似qq空間發布時間的事假戳轉化

#import@interface NSString (YCData)

- (NSString *)format:(NSString *)string;

-(NSString *)timestampSwitchTime:(NSInteger)timestamp andFormatter:(NSString *)format;

+ (NSString *)replaceUnicode:(NSString *)unicodeStr;

@end


#import "NSString+YCData.h"

@implementation NSString (YCData)

+ (NSString *)replaceUnicode:(NSString *)unicodeStr

{

NSString *tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\\u"withString:@"\\U"];

NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\""withString:@"\\\""];

NSString *tempStr3 = [[@"\""stringByAppendingString:tempStr2] stringByAppendingString:@"\""];

NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];

NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData

mutabilityOption:NSPropertyListImmutable

format:NULL

errorDescription:NULL];

return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n"withString:@"\n"];

}

-(NSString *)timestampSwitchTime:(NSInteger)timestamp andFormatter:(NSString *)format{

NSInteger timeS = timestamp;

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

[formatter setDateStyle:NSDateFormatterMediumStyle];

[formatter setTimeStyle:NSDateFormatterShortStyle];

[formatter setDateFormat:format];

[formatter setDateFormat:@"yyyy年MM月dd日 HH時mm分ss秒"];

// (@"YYYY-MM-dd hh:mm:ss")----------設置你想要的格式,hh與HH的區別:分別表示12小時制,24小時制

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];

[formatter setTimeZone:timeZone];

NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:timeS];

// NSLog(@"%zd? = %@",timestamp,confromTimesp);

NSString *confromTimespStr = [formatter stringFromDate:confromTimesp];

//? NSLog(@"%@",confromTimespStr);

return confromTimespStr;

}

- (NSString *)format:(NSString *)string{

NSDateFormatter *inputFormatter= [[NSDateFormatter alloc] init];

[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ];

[inputFormatter setDateFormat:@"yyyy年MM月dd日 HH時mm分ss秒"];

NSDate*inputDate = [inputFormatter dateFromString:string];

NSDateFormatter *outputFormatter= [[NSDateFormatter alloc] init];

[outputFormatter setLocale:[NSLocale currentLocale]];

[outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

//get date str

NSString *str= [outputFormatter stringFromDate:inputDate];

//str to nsdate

NSDate *strDate = [outputFormatter dateFromString:str];

//修正8小時的差時

NSTimeZone *zone = [NSTimeZone systemTimeZone];

NSInteger interval = [zone secondsFromGMTForDate: strDate];

NSDate *endDate = [strDate? dateByAddingTimeInterval: interval];

// NSLog(@"endDate:%@",endDate);

NSString *lastTime = [self compareDate:endDate];

return lastTime;

}

-(NSString *)compareDate:(NSDate *)date{

NSTimeInterval secondsPerDay = 24 * 60 * 60;

//修正8小時之差

NSDate *date1 = [NSDate date];

NSTimeZone *zone = [NSTimeZone systemTimeZone];

NSInteger interval = [zone secondsFromGMTForDate: date1];

NSDate *localeDate = [date1? dateByAddingTimeInterval: interval];

//NSLog(@"nowdate=%@\nolddate = %@",localeDate,date);

NSDate *today = localeDate;

NSDate *yesterday,*beforeOfYesterday;

//今年

NSString *toYears;

toYears = [[today description] substringToIndex:4];

yesterday = [today dateByAddingTimeInterval: -secondsPerDay];

beforeOfYesterday = [yesterday dateByAddingTimeInterval: -secondsPerDay];

// 10 first characters of description is the calendar date:

NSString *todayString = [[today description] substringToIndex:10];

NSString *yesterdayString = [[yesterday description] substringToIndex:10];

NSString *beforeOfYesterdayString = [[beforeOfYesterday description] substringToIndex:10];

NSString *dateString = [[date description] substringToIndex:10];

NSString *dateYears = [[date description] substringToIndex:4];

NSString *hourdate = [[date description] substringToIndex:14];

NSString *todayhour = [[today description] substringToIndex:14];

NSString *minitedate = [[date description] substringToIndex:17];

NSString *todayminite = [[today description] substringToIndex:17];

NSInteger miniteinteval = [[[date description] substringWithRange:(NSRange){14,2}] integerValue];

NSInteger todayminiteinteval = [[[today description] substringWithRange:(NSRange){14,2}] integerValue];

if ([minitedate isEqualToString:todayminite]) {

return @"剛剛";

}else{

if ([hourdate isEqualToString:todayhour]) {

return [NSString stringWithFormat:@"%zd分鐘前",todayminiteinteval-miniteinteval];

}

else{

}

}

NSString *dateContent;

if ([dateYears isEqualToString:toYears]) {//同一年

//今 昨 前天的時間

NSString *time = [[date description] substringWithRange:(NSRange){11,5}];

//其他時間

NSString *time2 = [[date description] substringWithRange:(NSRange){5,5}];

if ([dateString isEqualToString:todayString]){

dateContent = [NSString stringWithFormat:@"%@",time];

return dateContent;

} else if ([dateString isEqualToString:yesterdayString]){

dateContent = [NSString stringWithFormat:@"昨天 %@",time];

return dateContent;

}else if ([dateString isEqualToString:beforeOfYesterdayString]){

dateContent = [NSString stringWithFormat:@"前天 %@",time];

return dateContent;

}else{

return time2;

}

}else{

return dateString;

}

}

@end

使用起來方便,在model中的get方法中:

-(NSString *)createTime{

NSInteger strin = [_createTime integerValue];return stringArr;

NSString *str = [_createTime timestampSwitchTime:strin andFormatter:@"YYYY年MM月dd日 hh時mm分ss秒"];

NSString *stringArr = [str format:str];

return stringArr;

}

有興趣的可以做一個更好的封裝.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容