美文网首页
iOS工具类-时间差获取

iOS工具类-时间差获取

作者: 今晚月色 | 来源:发表于2019-02-26 14:54 被阅读0次
镇楼专用

最近想写点日常使用的工具类,方便开发。
首先想到就是时间之类的问题,所以打开Xocde,进行代码编辑。
这个代码考虑不是很完全,日后有时间再进行修改补充。

接口文件

我使用的类名称为DateHandleUtils

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, WeiBoTimeStyle) {
    WeiBoTimeStyleSecond,
    WeiBoTimeStyleMillisecond
};

@interface DateHandleUtils : NSObject

/**
 根据时间返回文字时间戳

 @param timeInterval 比较时间
 @param style 时间戳格式
 @return `刚刚`、`10秒前`、`10分钟前`、`1小时前`等等
 */
+ (NSString *)weiboTimeWithPublicTime:(NSTimeInterval)timeInterval timeStyel:(WeiBoTimeStyle)style;

/**
 * 当前时间时间戳
 *
 @return 毫秒的时间戳
 */
+ (NSTimeInterval)currentMilliSecondTimeInterval;

/**
 * 当前时间时间戳
 *
 @return 秒的时间戳
 */
+ (NSTimeInterval)currentSecondTimeInterval;

/**
 * 根据时间戳获取时间差
 *
 @param startTime 开始时间的时间戳
 @param endTime 结束时间的时间戳
 @return 返回差值,单位为秒
 @warning 传值格式为:毫秒级时间戳
 */
+ (NSTimeInterval)timeDifferenceOfMillisecondWithStartTimeInterval:(NSTimeInterval)startTime endTimeInterval:(NSTimeInterval)endTime;

/**
 * 根据时间戳获取时间差
 *
 @param startTime 开始时间的时间戳
 @param endTime 结束时间的时间戳
 @return 返回差值,单位为秒
 @warning 传值格式为:秒级时间戳
 */
+ (NSTimeInterval)timeDifferenceOfSecondsWithStartTimeInterval:(NSTimeInterval)startTime endTimeInterval:(NSTimeInterval)endTime;
@end

NS_ASSUME_NONNULL_END

实现文件

@implementation DateHandleUtils

+ (NSString *)weiboTimeWithPublicTime:(NSTimeInterval)timeInterval timeStyel:(WeiBoTimeStyle)style {
    NSTimeInterval interval;
        switch (style) {
        case WeiBoTimeStyleSecond:
            interval = [DateHandleUtils timeDifferenceOfSecondsWithStartTimeInterval:timeInterval endTimeInterval:[DateHandleUtils currentSecondTimeInterval]];
            break;
        case WeiBoTimeStyleMillisecond:
            interval = [DateHandleUtils timeDifferenceOfMillisecondWithStartTimeInterval:timeInterval endTimeInterval:[DateHandleUtils currentMilliSecondTimeInterval]];
            break;
        default:
            break;
    }
    
    if (interval < 10) {
        return @"刚刚";
    } else if (interval < 60) {
        return [NSString stringWithFormat:@"%.f秒前", interval];
    } else if (interval / 60 < 60) {
        return [NSString stringWithFormat:@"%.f分钟前", interval / 60];
    } else if (interval / 60 / 60 < 24) {
        return [NSString stringWithFormat:@"%.f小时前", interval / 60 / 60 - 1];
    } else if (interval / 60 / 60 / 24 < 30) {
        return [NSString stringWithFormat:@"%.f天前", interval / 60 / 60 / 24];
    } else if (interval / 60 / 60 / 24 / 30 < 12) {
        return [NSString stringWithFormat:@"%.f月前", interval / 60 / 60 / 24 / 30];
    } else if (interval / 60 / 60 / 24 / 30 / 12 >= 1){
        return [NSString stringWithFormat:@"%.f年前", interval / 60 / 60 / 24 / 30 / 12];
    } else {
        return @"未知时间";
    }
}

+ (NSTimeInterval)currentMilliSecondTimeInterval {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle: NSDateFormatterMediumStyle];
    [formatter setTimeStyle: NSDateFormatterShortStyle];
    [formatter setDateFormat: @"YYYY-MM-dd HH:mm:ss SSS"];
    
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName: @"Asia/Shanghai"];
    [formatter setTimeZone: timeZone];
    NSDate *datenow = [NSDate date];
    return [datenow timeIntervalSince1970] * 1000;
}

+ (NSTimeInterval)currentSecondTimeInterval {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle: NSDateFormatterMediumStyle];
    [formatter setTimeStyle: NSDateFormatterShortStyle];
    [formatter setDateFormat: @"YYYY-MM-dd HH:mm:ss SSS"];
    
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName: @"Asia/Shanghai"];
    [formatter setTimeZone: timeZone];
    NSDate *datenow = [NSDate date];
    return [datenow timeIntervalSince1970];
}

+ (NSTimeInterval)timeDifferenceOfMillisecondWithStartTimeInterval:(NSTimeInterval)startTime endTimeInterval:(NSTimeInterval)endTime {
    if (startTime < endTime) {
        return (endTime - startTime) / 1000;
    } else {
        return (startTime - endTime) / 1000;
    }
}

+ (NSTimeInterval)timeDifferenceOfSecondsWithStartTimeInterval:(NSTimeInterval)startTime endTimeInterval:(NSTimeInterval)endTime {
    if (startTime < endTime) {
        return (endTime - startTime);
    } else {
        return (startTime - endTime);
    }
}
@end

使用方式

都是类方法,用的时候直接使用类名调用就可以了(实例:[DateHandleUtils currentMilliSecondTimeInterval];);

相关文章

网友评论

      本文标题:iOS工具类-时间差获取

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