在开发中经常用遇到一些对日期进行各种格式处理的需求, 为了方便更快的开发,本人对各种时间格式的转换和处理做了个总结.
废话不多说直接上干货:
首先创建一个NSDate的分类, 在里面增加我们要做的一些格式处理的方法. 如下:
#import <Foundation/Foundation.h> @interface NSDate (Extensions) - (NSString *)stringFromDate; - (NSDate *)dateByAddingMonth:(NSInteger)month; /** * @Author GorLong * * 获取当前日期 yyyyMMdd * */ + (NSString *)nowDate; /** * @Author GorLong * * 获取上个月日期 yyyyMMdd * */ + (NSString *)previousMonthDate; /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> yyyy年MM月dd日 * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormat:(NSString *)tempTimeStr; /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> yyyy-MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatTwo:(NSString *)tempTimeStr; /** * @Author GorLong * * 日期格式转换, MM-dd -> MM月dd日 * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatThree:(NSString *)tempTimeStr; /** * @Author GorLong * * 时间格式转换 yyyy年MM月dd日 -> MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatFour:(NSString *)tempTimeStr; /** * @Author GorLong * * 时间格式转换 HHmmss -> HH:mm * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatFive:(NSString *)tempTimeStr; /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatSix:(NSString *)tempTimeStr; /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> yy-MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatSeven:(NSString *)tempTimeStr; /** * @author GorLong * * date转换为string * * @param date date * @param format 转换后的格式[yyyy-MM-dd-HH:mm:ss.SSS] * * @return 返回转换后的格式 */ + (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format; /** * @author GorLong * * string转换date * * @param string string类型的date * @param format 字串类型日期格式[yyyy-MM-dd-HH:mm:ss.SSS] * * @return 返回日期 */ + (NSDate *)dateFormString:(NSString *)string format:(NSString *)format; /** * @author GorLong, 15-01-29 11:01:36 * * 转换字串型日期格式 * * @param stringDate 字串型日期 * @ oldFormat 旧日期格式 * @param newFormat 新日期格式 * * @return 转换后的日期格式 */ + (NSString *)stringFromStringDate:(NSString *)stringDate oldFormat:(NSString *)oldFormat newFormat:(NSString *)newFormat; /** * @author GorLong, 16-08-16 13:08:27 * * 获取当前时间戳 * * @return 时间戳 */ + (NSString *)nowTimestamp; @end 然后是.m文件中方法的实现: #import "NSDate+Extensions.h" @implementation NSDate (Extensions) - (NSDate *)dateByAddingMonth:(NSInteger)month { NSCalendar *gregorian = [NSCalendar currentCalendar]; NSDateComponents *comps = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:self]; int y = (int)[comps year]; int m = (int)[comps month]; int d = (int)[comps day]; int p = month % 12; y += month / 12; m += p; int daysModifier[] = {1,-2,1,0,1,0,1,1,0,1,0,1}; if (m < 1) {--y; m += 12;} else if (m > 12) {++y;m -= 12;} int q = daysModifier[m - 1] + 30; if (m == 2) q += !((y % 4 != 0) || (y % 100 == 0 && y % 400 != 0)); if (d > q) d = q; [comps setYear:y]; [comps setMonth:m]; [comps setDay:d]; NSDate *date = [gregorian dateFromComponents:comps]; return date; } - (NSString *)stringFromDate { unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = [calendar components:unitFlags fromDate:self]; NSString *string = [NSString stringWithFormat:@"%ddd", (int)[comps year], (int)[comps month], (int)[comps day]]; return string; } /** * @Author GorLong * * 获取当前日期 yyyyMMdd * */ + (NSString *)nowDate { NSDateFormatter *formater = [[NSDateFormatter alloc] init]; NSDate *curDate = [NSDate date];//获取当前日期 [formater setDateFormat:@"yyyyMMdd"];//这里去掉 具体时间 保留日期 NSString *curTime = [formater stringFromDate:curDate]; return curTime; } /** * @Author GorLong * * 获取上个月日期 yyyyMMdd * */ + (NSString *)previousMonthDate { NSDate *previousMonth = [[NSDate date] dateByAddingMonth:-1]; NSDateFormatter *formater = [[NSDateFormatter alloc] init]; NSDate *curDate = previousMonth; [formater setDateFormat:@"yyyyMMdd"]; NSString *curTime = [formater stringFromDate:curDate]; return curTime; } /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> yyyy年MM月dd日 * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormat:(NSString *)tempTimeStr { if (tempTimeStr.length < 8) { return nil; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMdd"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"yyyy年MM月dd日"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> yyyy-MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatTwo:(NSString *)tempTimeStr { if (tempTimeStr.length <= 0) { return nil; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMdd"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"yyyy-MM-dd"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @Author GorLong * * 日期格式转换, MM-dd -> MM月dd日 * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatThree:(NSString *)tempTimeStr { if (tempTimeStr.length <= 0) { return nil; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"MMdd"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"MM月dd日"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @Author GorLong * * 时间格式转换 yyyy年MM月dd日 -> MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatFour:(NSString *)tempTimeStr { if (tempTimeStr.length <= 0) { return @""; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy年MM月dd日"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"MM-dd"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @Author GorLong * * 时间格式转换 HHmmss -> HH:mm * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatFive:(NSString *)tempTimeStr { if (tempTimeStr.length <= 0) { return @""; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"HHmmss"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"HH:mm"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatSix:(NSString *)tempTimeStr { if (tempTimeStr.length <= 0) { return @""; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMdd"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"MM-dd"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @Author GorLong * * 时间格式转换 yyyyMMdd -> yy-MM-dd * * @param tempTimeStr 转换前的时间 * * @return 转换后的时间 */ + (NSString *)changeTimeFormatSeven:(NSString *)tempTimeStr { if (tempTimeStr.length <= 0) { return nil; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMdd"; NSDate *date = [formatter dateFromString:tempTimeStr]; formatter.dateFormat = @"yy-MM-dd"; NSString *dateStr = [formatter stringFromDate:date]; return dateStr; } /** * @author GorLong * * date转换为string * * @param date date * @param format 转换后的格式[yyyy-MM-dd-HH:mm:ss.SSS] * * @return 返回转换后的格式 */ + (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format { if(!date) { return nil; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = format; return [formatter stringFromDate:date]; } /** * @author GorLong * * string转换date * * @param string string类型的date * @param format 字串类型日期格式[yyyy-MM-dd-HH:mm:ss.SSS] * * @return 返回日期 */ + (NSDate *)dateFormString:(NSString *)string format:(NSString *)format { if(!string) { return nil; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = format; return [formatter dateFromString:string]; } /** * @author GorLong, 15-01-29 11:01:36 * * 转换字串型日期格式 * * @param stringDate 字串型日期 * @param oldFormat 旧日期格式 * @param newFormat 新日期格式 * * @return 转换后的日期格式 */ + (NSString *)stringFromStringDate:(NSString *)stringDate oldFormat:(NSString *)oldFormat newFormat:(NSString *)newFormat { NSDate *date = [self dateFormString:stringDate format:oldFormat]; NSString *strDate = [self stringFromDate:date format:newFormat]; return strDate; } /** * @author GorLong, 16-08-16 13:08:27 * * 获取当前时间戳 * * @return 时间戳 */ + (NSString *)nowTimestamp{ NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval a=[dat timeIntervalSince1970] * 1000; NSString *timestamp = [NSString stringWithFormat:@"%.0f", a]; return timestamp; } @end这样放到工程里面,有对日期进行处理的时候直接调用是不是很方便! 另外欢迎各位进行补充和优化!