美文网首页
OC_时间戳、时间字符串、

OC_时间戳、时间字符串、

作者: Init_ZSJ | 来源:发表于2018-01-06 15:06 被阅读0次

序言:翻阅资料,学习,探究,总结,借鉴,谢谢探路者,我只是个搬运工,不对不妥的地方欢迎指点。
参考、转发资料:

1、时间、时间戳之间的转换,有以下方法

  • 获取现在的时间戳
  • 获取现在的时间
  • 时间戳转换成字符串
  • 字符串转换成时间戳
  • 字符串转换成字符串 (精确时间转换成模糊时间,,例如:yyyy-MM-dd HH:mm:ss -> HH:mm)
  • 时间戳转换成字符串 (多少时间之内的,类似朋友圈的发布时间显示)
  • 获取多少天之前之后的日期时间

SJDateConvertTool.h

typedef enum : NSUInteger {
    DateDisplayType_Default = 0,        //  yyyy-MM-dd HH:mm:ss
    DateDisplayType_Date = 1,           //  yyyy-MM-dd
    DateDisplayType_Time = 2,           //  HH:mm
    DateDisplayType_Custom = 3          //  自定义类型
} DateDisplayType;


typedef enum : NSUInteger {
    PreviousDateDirectionType_Before = 0,       //  之前
    PreviousDateDirectionType_After = 1,        //  之后
} PreviousDateDirectionType;

@interface SJDateConvertTool : NSObject



/**
 获取现在的时间戳
 
 @return 现在的时间戳
 */
+ (long)getThePresentTimeStamp;



/**
 获取现在的时间
 
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 现在的时间
 */
+ (NSString *)getThePresentTimeWithDateDisplayType:(DateDisplayType)dateDisplayType
                                  customTypeString:(NSString *)customTypeString;



/**
 时间戳转换成字符串

 @param timeStamp 时间戳
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 字符串日期
 */
+ (NSString *)dateConvertTimeStampToStringWithTimeStamp:(long)timeStamp
                                        dateDisplayType:(DateDisplayType)dateDisplayType
                                       customTypeString:(NSString *)customTypeString;



/**
 字符串转换成时间戳

 @param timeString 时间字符串
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 时间戳
 */
+ (long)dateConvertStringToTimeStampWithTimeString:(NSString *)timeString
                                   dateDisplayType:(DateDisplayType)dateDisplayType
                                  customTypeString:(NSString *)customTypeString;



/**
 字符串转换成字符串  (精确时间转换成模糊时间,,例如:yyyy-MM-dd HH:mm:ss -> HH:mm)
 
 @param timeString 时间字符串
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 时间戳
 */
+ (NSString *)dateConvertStringToStringWithTimeString:(NSString *)timeString
                                      dateDisplayType:(DateDisplayType)dateDisplayType
                                     customTypeString:(NSString *)customTypeString;



/**
 时间戳转换成字符串  (多少时间之内的,类似朋友圈的发布时间显示)
 
 @param timeStamp 时间戳
 @param hour 设置多少小时以内显示分钟
 @return 时间字符串
 */
+ (NSString *)dateConvertTimeStampToLatelyStringWithTimeStamp:(long)timeStamp
                                                         hour:(NSInteger)hour;



/**
 获取多少天之前之后的日期时间
 
 @param timeString 时间字符串
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @param dayNum 天数
 @param directionType 之前之后方向
 @return 日期时间字符串
 */
+ (NSString *)gainPreviousDateWithBeginTimeString:(NSString *)timeString
                                  dateDisplayType:(DateDisplayType)dateDisplayType
                                 customTypeString:(NSString *)customTypeString
                                           dayNum:(NSInteger)dayNum
                                    directionType:(PreviousDateDirectionType)directionType;

SJDateConvertTool.m

/**
 获取现在的时间戳

 @return 现在的时间戳
 */
+ (long)getThePresentTimeStamp
{
    NSDate *date = [NSDate date];
    long timeStamp = [date timeIntervalSince1970];
    
    return timeStamp;
}
/**
 获取现在的时间

 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 现在的时间
 */
+ (NSString *)getThePresentTimeWithDateDisplayType:(DateDisplayType)dateDisplayType
                                  customTypeString:(NSString *)customTypeString
{
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
    [dateformatter setDateFormat: [self getDateDisplayTypeWithType:dateDisplayType customTypeString:customTypeString]];
    
    NSDate *date = [NSDate date];
    
    NSString *timeString = [dateformatter stringFromDate:date];
    
    return timeString;
}

/**
 时间戳转换成字符串
 
 @param timeStamp 时间戳
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 字符串日期
 */
+ (NSString *)dateConvertTimeStampToStringWithTimeStamp:(long)timeStamp
                                        dateDisplayType:(DateDisplayType)dateDisplayType
                                       customTypeString:(NSString *)customTypeString
{
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
    [dateformatter setDateFormat: [self getDateDisplayTypeWithType:dateDisplayType customTypeString:customTypeString]];
    
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeStamp];
    
    NSString *timeString = [dateformatter stringFromDate:date];
    
    return timeString;
}

/**
 字符串转换成时间戳
 
 @param timeString 时间字符串
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 时间戳
 */
+ (long)dateConvertStringToTimeStampWithTimeString:(NSString *)timeString
                                   dateDisplayType:(DateDisplayType)dateDisplayType
                                  customTypeString:(NSString *)customTypeString
{
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
    [dateformatter setDateFormat: [self getDateDisplayTypeWithType:dateDisplayType customTypeString:customTypeString]];
    
    NSDate *date = [dateformatter dateFromString:timeString];
    
    long timeStamp = [date timeIntervalSince1970];
    
    return timeStamp;
}


/**
 字符串转换成字符串  (精确时间转换成模糊时间,,例如:yyyy-MM-dd HH:mm:ss -> HH:mm)
 
 @param timeString 时间字符串
 @param dateDisplayType 转换类型(期望输入的类型)
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 时间戳
 */
+ (NSString *)dateConvertStringToStringWithTimeString:(NSString *)timeString
                                      dateDisplayType:(DateDisplayType)dateDisplayType
                                     customTypeString:(NSString *)customTypeString
{
    //  时间戳
    long timeStap = [self dateConvertStringToTimeStampWithTimeString:timeString dateDisplayType:dateDisplayType customTypeString:customTypeString];
    
    //  时间字符串
    NSString *newTimeString = [self dateConvertTimeStampToStringWithTimeStamp:timeStap dateDisplayType:dateDisplayType customTypeString:customTypeString];
    
    return newTimeString;
}



/**
 时间戳转换成字符串  (多少时间之内的,类似朋友圈的发布时间显示)

 @param timeStamp 时间戳
 @param hour 设置多少小时以内显示分钟
 @return 时间字符串
 */
+ (NSString *)dateConvertTimeStampToLatelyStringWithTimeStamp:(long)timeStamp
                                                         hour:(NSInteger)hour
{
    //  获取现在的时间戳
    long nowTimeStamp = [self getThePresentTimeStamp];
    long diffTimeStamp = nowTimeStamp - timeStamp;
    
    //  显示的日期
    NSString *dateString = @"";
    
    if(diffTimeStamp >= 24*60*60)
    {
        //  一天前,显示日期
        dateString = [self dateConvertTimeStampToStringWithTimeStamp:timeStamp dateDisplayType:DateDisplayType_Date customTypeString:nil];
    }
    else if(diffTimeStamp >= 60*60*hour)
    {
        //  一天内,但是hour小时外,显示今天的小时
        NSInteger hourString = (NSInteger)(diffTimeStamp/(60*60));
        dateString = [NSString stringWithFormat:@"%ld小时前",(long)hourString];
    }
    else if(diffTimeStamp >= 60*60)
    {
        //  1小时至hour小时之间
        
        //  小时
        NSInteger beforeHour = (NSInteger)(diffTimeStamp/(60*60));
        //  分钟
        NSInteger beforeMinute = (NSInteger)((diffTimeStamp - beforeHour*60*60)/60);
        dateString = [NSString stringWithFormat:@"%ld小时%ld分钟前",(long)beforeHour,(long)beforeMinute];
    }
    else if(diffTimeStamp >= 1*60)
    {
        //  一小时至一分钟之内
        NSInteger beforeMinute = (NSInteger)(diffTimeStamp/60);
        dateString = [NSString stringWithFormat:@"%ld分钟前",(long)beforeMinute];
    }
    else
    {
        //  一分钟之内
        dateString = @"刚刚";
    }
    
    return dateString;
}



/**
 获取多少天之前之后的日期时间

 @param timeString 时间字符串
 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @param dayNum 天数
 @param directionType 之前之后方向
 @return 日期时间字符串
 */
+ (NSString *)gainPreviousDateWithBeginTimeString:(NSString *)timeString
                                  dateDisplayType:(DateDisplayType)dateDisplayType
                                 customTypeString:(NSString *)customTypeString
                                           dayNum:(NSInteger)dayNum
                                    directionType:(PreviousDateDirectionType)directionType
{
    //  获取时间戳
    long timeStamp = [self dateConvertStringToTimeStampWithTimeString:timeString dateDisplayType:dateDisplayType customTypeString:customTypeString];
    
    //  时间差
    long timeDiff = dayNum*24*60*60;
    
    //  新的时间戳
    long newTimeStamp ;
    if(directionType == PreviousDateDirectionType_Before)
    {
        //  之前
        newTimeStamp = timeStamp - timeDiff;
    }
    else
    {
        //  之后
        newTimeStamp = timeStamp + timeDiff;
    }
    
    //  获取时间字符串
    NSString *newTimeString = [self dateConvertTimeStampToStringWithTimeStamp:newTimeStamp dateDisplayType:dateDisplayType customTypeString:customTypeString];
    
    return newTimeString;
        
}



/**
 获取转换类型

 @param dateDisplayType 转换类型
 @param customTypeString 自定义类型,如果不需要的话设置nil
 @return 转换类型
 */
+ (NSString *)getDateDisplayTypeWithType:(DateDisplayType)dateDisplayType
                        customTypeString:(NSString *)customTypeString
{
    NSString *timeTypeString = nil;
    
    switch (dateDisplayType)
    {
        case DateDisplayType_Default:
        {
            timeTypeString = @"yyyy-MM-dd HH:mm:ss";
            break;
        }
        case DateDisplayType_Date:
        {
            timeTypeString = @"yyyy-MM-dd";
            break;
        }
        case DateDisplayType_Time:
        {
            timeTypeString = @"HH:mm";
            break;
        }
        case DateDisplayType_Custom:
        {
            //  自定义类型不正确的话设置默认类型
            timeTypeString = customTypeString ? customTypeString : @"yyyy-MM-dd HH:mm:ss";
            break;
        }
        default:
        {
            //  找不到的话设置默认类型
            timeTypeString = @"yyyy-MM-dd HH:mm:ss";
            break;
        }
    }
    return timeTypeString;
}

类文件git地址:
https://gitee.com/OC_SJOriginalDemoClass/DateConvert.git

相关文章

网友评论

      本文标题:OC_时间戳、时间字符串、

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