在开发中经常用遇到一些对日期进行各种格式处理的需求, 为了方便更快的开发,本人对各种时间格式的转换和处理做了个总结.
废话不多说直接上干货:
首先创建一个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:@"%d%02d%02d", (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
这样放到工程里面,有对日期进行处理的时候直接调用是不是很方便! 另外欢迎各位进行补充和优化!