我们以微信聊天为例,在消息界面的右上方有时间,当天显示时间,以及昨天,星期几,这些情况。以及其他的一些聊天软件里面有多少秒之前,几分钟之前这样的。
然后在网上找了半天,没有完全符合。想拿过来改改,改了一下感觉非常费事,然后就自己写了。最后发现还是下面代码写法最通用。
代码没什么难度,修改也很方便,主要是逻辑简单,方便使用。不管你有什么日期比较需求,下面的写法绝对可以提供最多的功能。
1.将所有年月日时分秒提取出来,方便大家做比较.
- (NSString *)formateDate:(NSDate *)originDate
{
@try {
NSString *dateStr = nil;
// ------实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//这里的格式必须和DateString格式一致
NSDate * nowDate = [NSDate date];
// ------将需要转换的时间转换成 NSDate 对象
NSString *originDateStr = [dateFormatter stringFromDate:originDate];
NSString *nowDateStr = [dateFormatter stringFromDate:nowDate];
// 年
NSString * yearStr = [originDateStr substringToIndex:4];
NSString * nowYear = [nowDateStr substringToIndex:4];
BOOL isSameYear = [yearStr isEqualToString:nowYear];
// 月
NSRange monthRange = NSMakeRange(5, 2);
NSString *monthStr = [originDateStr substringWithRange:monthRange];
NSString *nowMonth = [nowDateStr substringWithRange:monthRange];
BOOL isSameMonth = [monthStr isEqualToString:nowMonth];
// 日
NSRange dayRange = NSMakeRange(8, 2);
NSString *dayStr = [originDateStr substringWithRange:dayRange];
NSString *nowDay = [nowDateStr substringWithRange:dayRange];
BOOL isSameDay = [dayStr isEqualToString:nowDay];
int dayValue = nowDay.intValue - dayStr.intValue;// 天数间隔
// 时
NSRange hourRange = NSMakeRange(11, 2);
NSString *hourStr = [originDateStr substringWithRange:hourRange];
NSString *nowhour = [nowDateStr substringWithRange:hourRange];
BOOL isSameHour = [hourStr isEqualToString:nowhour];
// 分
NSRange minuteRange = NSMakeRange(14, 2);
NSString *minuteStr = [originDateStr substringWithRange:minuteRange];
NSString *nowminute = [nowDateStr substringWithRange:minuteRange];
// 秒
NSRange secondRange = NSMakeRange(17, 2);
NSString *secondStr = [originDateStr substringWithRange:secondRange];
NSString *nowSecond = [nowDateStr substringWithRange:secondRange];
/***********************需要的时间字符串**********************/
if (isSameYear) {
if (isSameMonth) {
if (isSameDay) {
}
}
}
} @catch (NSException *exception) {
return @"";
} @finally {
return @"";
}
}
2.方便需要用到显示星期几的
- (NSString*)weekdayStringFromDate:(NSDate*)inputDate {
NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"星期天", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSTimeZone *timeZone = [[NSTimeZone alloc] init];
[calendar setTimeZone: timeZone];
NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];
return [weekdays objectAtIndex:theComponents.weekday];
}
3.总结
总体来说并不推荐大家在iOS设备中进行转换,大量的tableviewcell需要时间创建转换,是比较好性能的. 最好让后台处理