美文网首页
开发中常用的日期转换方法、公式

开发中常用的日期转换方法、公式

作者: 小四_5e7b | 来源:发表于2019-11-24 19:18 被阅读0次

在开发中常常用到各种格式的日期,虽然不复杂,但是很繁琐。 下面是日常开发中用到的一些日期的转换、计算。 希望能帮大家减少开发时间。此文章持续更新中......

一、将日期转换为指定格式字符串

/**
将日期转换为指定格式字符串

@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;
}

相关文章

  • HIVE常用函数篇

    SQL开发中经常要用到日期类型的转换。一如yyyymmdd和yyyy-mm-dd日期之间的切换常用转换方法如下:方...

  • Java 中常用的一些日期转换方法(不断更新中)

    这个 DateUtil.java 类,整理的是 Java 中常用的一些日期转换方法,我们在项目开发中经常会用到。本...

  • 日期对象和字符串之间相互转换

    总结日期对象和字符串之间转换的常用方法 1、获取日期对象的毫秒数用日期变量调用getTime方法,返回Long型 ...

  • WPS技巧

    1.匹配身份证中的出生日期,及性别 在任意单元格输入“=”,选择公式中的“常用函数” ,选择“常用公式”,即可选择...

  • iOS 开发中 runtime 常用的几种方法

    iOS 开发中 runtime 常用的几种方法 iOS 开发中 runtime 常用的几种方法

  • NSDate相关

    NSDate获取当前时间 单独获取 获取较为完整日期的方法 时间戳转换示例 时间戳转换成NSDate 常用打印格式...

  • excel表中时间戳和日期的相互转换

    excel中如何将时间戳转换为日期格式 从linux系统中获取的时间戳信息通常为s,将其转换的公式为: =TEXT...

  • js基础(2)

    5、Math中的常用方法(10个)6、Date日期操作基础详解以及常用方法(12个) 5、Math中的常用方法(1...

  • RGB转YCbCr

    在MATLAB中 在Python中 方法一:利用skimage中的转换函数 方法二:利用公式计算 读取图片,并获取...

  • Flutter DateTime的部分用法

    在客户端开发中,时间(包含日期和时间)是一个很常用的功能,比如显示时间、时间和时间戳转换、时间之间的比较等...

网友评论

      本文标题:开发中常用的日期转换方法、公式

      本文链接:https://www.haomeiwen.com/subject/fnsjwctx.html