最近有個需求處理時間格式化如下圖
時間格式化效果.png
當天顯示為 今天 和 HH:mm, 不是同一天的顯示為 MM/dd 和 HH:mm, 非當年的顯示yyyy年
最后用了一個簡單的思路來解決下
先寫一個工具類
.h文件
@interface TimeModel : NSObject
@property (nonatomic, copy) NSString *yearString;
@property (nonatomic, copy) NSString *monthDayString;
@property (nonatomic, copy) NSString *timeString;
/*
* 時間格式化 當天顯示為 今天 和 HH:mm, 非當天顯示MM/dd 和 HH:mm, 非當年的顯示yyyy年
*pragma prevDate - 上一個時間
*pragma nextDate - 當前需要計算的時間
*pragma formate - 時間格式化樣式
*/
+ (TimeModel *)formateDate:(NSDate *)prevDate
nextDate:(NSDate *)nextDate
withFormate:(NSString *)formate;
@end
.m文件
@implementation TimeModel
/*
* 時間格式化 當天顯示為 今天 和 HH:mm, 非當天顯示MM/dd 和 HH:mm, 非當年的顯示yyyy年
*pragma prevDate - 上一個時間
*pragma nextDate - 當前需要計算的時間
*pragma formate - 時間格式化樣式
*/
+ (TimeModel *)formateDate:(NSDate *)prevDate
nextDate:(NSDate *)nextDate
withFormate:(NSString *)formate
{
@try {
if (formate.length < 0) {
formate = @"yyyy-MM-dd HH:mm:ss";
}
//實例化一個NSDateFormatter對象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formate];
NSDate * nowDate = [NSDate date];
// 再然后蚣旱,把間隔的秒數(shù)折算成天數(shù)和小時數(shù):
NSString *yearString = @"";
NSString *monthDayString = @"";
NSString *timeString = @"";
/** 同一天的數(shù)據(jù) */
[dateFormatter setDateFormat:@"MM/dd"];
NSString *prevMonthDay = [dateFormatter stringFromDate:prevDate];
NSString *needMonthDay = [dateFormatter stringFromDate:nextDate];
NSString *nowMonthDay = [dateFormatter stringFromDate:nowDate];
/** 同一年 */
[dateFormatter setDateFormat:@"yyyy年"];
NSString *prevYear = [dateFormatter stringFromDate:prevDate];
NSString *needYear = [dateFormatter stringFromDate:nextDate];
NSString *nowYear = [dateFormatter stringFromDate:nowDate];
/** 處理顯示年 */
if (![needYear isEqualToString:prevYear]) {
yearString = needYear;
if (!prevYear && [needYear isEqualToString:nowYear]) {
yearString = @"";
}
}
/** 處理顯示天 */
if (![needMonthDay isEqualToString:prevMonthDay]) {
monthDayString = needMonthDay;
[dateFormatter setDateFormat:@"HH:mm"];
timeString = [dateFormatter stringFromDate:nextDate];
if (!prevMonthDay) {
if ([needMonthDay isEqualToString:nowMonthDay]) {
monthDayString = @"今天";
}
}
} else {
[dateFormatter setDateFormat:@"HH:mm"];
timeString = [dateFormatter stringFromDate:nextDate];
}
TimeModel *timeModel = [[TimeModel alloc] init];
timeModel.yearString = yearString;
timeModel.monthDayString = monthDayString;
timeModel.timeString = timeString;
return timeModel;
} @catch (NSException *exception) {
TimeModel *timeModel = [[TimeModel alloc] init];
return timeModel;
}
}
@end
實際中的業(yè)務邏輯是可以獲取到一些時間數(shù)組,以時間戳為例
//獲取當前時間戳 (以毫秒為單位)
+ (NSString *)getNowTimeTimestamp3{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss SSS"]; // ----------設置你想要的格式,hh與HH的區(qū)別:分別表示12小時制,24小時制
//設置時區(qū),這個對于時間的處理有時很重要
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
[formatter setTimeZone:timeZone];
NSDate *datenow = [NSDate date];//現(xiàn)在時間,你可以輸出來看下是什么格式
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]*1000];
return timeSp;
}
/** 存儲時間戳數(shù)組 */
- (NSMutableArray *)dataArray
{
if (!_dataArray) {
_dataArray = [NSMutableArray array];
[_dataArray addObject:[[self class] getNowTimeTimestamp3]];
[_dataArray addObject:@"1634300370000"];
[_dataArray addObject:@"1634806363000"];
[_dataArray addObject:@"1634806422000"];
}
return _dataArray;
}
/** 存儲格式化后的 TimeModel 數(shù)據(jù) */
- (NSMutableArray *)resultArray
{
if (!_resultArray) {
_resultArray = [NSMutableArray array];
}
return _resultArray;
}
/**
將時間戳轉化為date類型
@param dateString 毫秒字符串時間
@return NSDate日期
*/
- (NSDate *)formatDateWithDateString:(NSString *)dateString
{
NSTimeInterval time = [dateString longLongValue]/1000;
NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:time];
return confromTimesp;
}
暫時寫在touch事件里做測試
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.resultArray removeAllObjects];
for (int i = 0; i < self.dataArray.count; i++) {
NSDate *infoDate;
NSDate *nextDate;
if (i == 0) {
infoDate = nil;
}else{
infoDate = [self formatDateWithDateString:self.dataArray[i-1]];
}
nextDate = [self formatDateWithDateString:self.dataArray[i]];
TimeModel *timeModel = [[self class] formateDate:infoDate nextDate:nextDate withFormate:@""];
[self.resultArray addObject:timeModel];
}
NSLog(@"self.resultArray = %@", self.resultArray);
}
時間處理結束