在开发中常常用到各种格式的日期,虽然不复杂,但是很繁琐。 下面是日常开发中用到的一些日期的转换、计算。 希望能帮大家减少开发时间。此文章持续更新中......
一、将日期转换为指定格式字符串
/**
将日期转换为指定格式字符串
@param formatStr 转换格式
@param date 要转换的日期
*/
- (NSString *)convertsDateToString :(NSDate *)date formatStr :(NSString *)formatStr {
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = formatStr;
NSString *dateStr = [format stringFromDate:date];
return dateStr;
}
二、将日期格式的字符串转换为日期
/**
将日期格式的字符串转换为日期
@param formatStr 转换的格式
@param dateStr 日期字符串
*/
- (NSDate *)convertsDateFormattedStringToDate :(NSString *)dateStr formatStr :(NSString *)formatStr {
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = formatStr;
NSDate *date = [format dateFromString:dateStr];
return date;
}
三、将一个日期格式字符串转为其他日期格式字符串
/**
将一个日期格式字符串转为其他日期格式字符串
@param dateStr 要转换的日期字符串
@param currentFormatStr 当前日期字符串的日期格式
@param toFormatStr 要转换的日期格式
*/
- (NSString *)convertsDateFormatStringToOtherDateFormatString :(NSString *)dateStr currentFormatStr :(NSString *)currentFormatStr toFormatStr :(NSString *)toFormatStr{
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = currentFormatStr;
NSDate *currentDate = [format dateFromString:dateStr];
format.dateFormat = toFormatStr;
NSString *toDateStr = [format stringFromDate:currentDate];
return toDateStr;
}
四、获取时间戳
/// 获取时间戳
- (NSTimeInterval)getTimeStamp{
NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval timeStamp =[dat timeIntervalSince1970];
return timeStamp;
}
注意:此方法为方法五及以后公共方法
- (NSDate *)conversionDate :(id)date formatStr :(NSString *)formatStr {
if ([date isKindOfClass:[NSDate class]]) {
return date;
}
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = formatStr;
NSDate *d1 = [format dateFromString:date];
if (!d1) {
NSLog(@"日期:%@转换失败,输入格式:%@", date, formatStr);
}
return d1;
}
五、 判断两个日期是否相等
typedef enum : NSUInteger {
CompareDateTypeNormal = 0, // 按年月日时分秒比较
CompareDateTypeYear, // 比较年
CompareDateTypeMonth, // 比较年月
CompareDateTypeDay, // 比较年月日
} CompareDateType;
/// 比较两个日期大小
/// @param date1 日期1
/// @param formatStr1 日期1格式,如果date1为NSDate,则可以不传
/// @param date2 日期2
/// @param formatStr2 日期2格式,如果date2为NSDate,则可以不传
/// @param compareDateType 如何比较
/// @return -1:date1 > date2, 0: date1 = date2, 1: date1 < date2
- (NSInteger)compareDate :(id)date1 formatStr1 :(NSString *)formatStr1 date2:(id)date2 formatStr2 :(NSString *)formatStr2 compareDateType :(CompareDateType)compareDateType{
NSDate *d1 = [self conversionDate:date1 formatStr:formatStr1];
NSDate *d2 = [self conversionDate:date2 formatStr:formatStr2];
NSString *cFormatStr = @"";
switch (compareDateType) {
case CompareDateTypeNormal:
cFormatStr = @"yyyy-MM-dd HH:mm:ss";
break;
case CompareDateTypeYear:
cFormatStr = @"yyyy";
break;
case CompareDateTypeMonth:
cFormatStr = @"yyyy-MM";
break;
case CompareDateTypeDay:
cFormatStr = @"yyyy-MM-dd";
break;
}
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = cFormatStr;
NSString *s1 = [format stringFromDate:d1];
NSString *s2 = [format stringFromDate:d2];
NSDate *d3 = [format dateFromString:s1];
NSDate *d4 = [format dateFromString:s2];
NSComparisonResult result = [d3 compare: d4];
if (result==NSOrderedSame){
//相等
return 0;
}else if (result == NSOrderedAscending){
//date2大于date1
return 1;
}else if (result == NSOrderedDescending){
//date2小于date1
return -1;
}
return -1;
}
六、计算两个时间相差多少秒
/**
计算两个时间相差多少秒
@param date1 日期1
@param formatStr1 日期1的格式,非必传。date1为日期时不传
@param date2 日期2
@param formatStr2 日期2的格式,非必传。date2为日期时不传
@return 差值
*/
- (NSTimeInterval)secondsDifferential :(id)date1 formatStr1 :(NSString *)formatStr1 date2:(id)date2 formatStr2 :(NSString *)formatStr2 {
NSDate *d1 = [self conversionDate:date1 formatStr:formatStr1];
NSTimeInterval t1 = [d1 timeIntervalSince1970];
NSDate *d2 = [self conversionDate:date2 formatStr:formatStr2];
NSTimeInterval t2 = [d2 timeIntervalSince1970];
NSTimeInterval value = t2 - t1;
return fabs(value);
}
七、计算年龄
/// 年龄计算
/// @param birthDate 出生日期
/// @param birthDateFormat 出生日期格式,如果birthDate为NSDate,则不传
/// @param deadline 年龄截止计算日期
/// @param deadlineFormat deadline为NSDate,则不传
- (NSInteger)calculateAge :(id)birthDate birthDateFormat :(NSString *)birthDateFormat deadline :(id)deadline deadlineFormat :(NSString *)deadlineFormat{
NSDate *d1 = [self conversionDate:birthDate formatStr:birthDateFormat];
NSDate *d2 = [self conversionDate:deadline formatStr:deadlineFormat];
// 出生日期转换 年月日
NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:d1];
NSInteger brithDateYear = [components1 year];
NSInteger brithDateDay = [components1 day];
NSInteger brithDateMonth = [components1 month];
// 获取系统当前 年月日
NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:d2];
NSInteger currentDateYear = [components2 year];
NSInteger currentDateDay = [components2 day];
NSInteger currentDateMonth = [components2 month];
// 计算年龄
NSInteger iAge = currentDateYear - brithDateYear - 1;
if ((currentDateMonth > brithDateMonth) || (currentDateMonth == brithDateMonth && currentDateDay >= brithDateDay)) {
iAge++;
}
return iAge;
}
网友评论