• supersr--时间显示逻辑-->NSDate+NSCalendar


    一种:时间逻辑:

     

    - (NSString *)created_at{

        

        //    从后台返回的字符串格式:Mon Aug 03 09:17:31 +0800 2014,

        

        //NSDateFormatter可以把NSDate转成字符串,也可以把字符串转成NSDate

        //初始化一个时间格式化器

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        //指定时间格式化字符串-->是一个什么样的格式

        formatter.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy";

        //    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

        

        //如果是真机,一定要指定个这locale,标明这个时间是什么样标识

        formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

        

        //当前w创建的时间

        NSDate *createDate = [formatter dateFromString:_created_at];

        //    //取出当前时间

        NSDate *currentDate = [NSDate date];

        

        //拿着当前时间与create_at进行一个对比

        

        //    if (是今年) {

        if ([self isThisYearWithDate:createDate]) {

            //是同一年

            

            //判断是否是今天

            if ([self isTodayWithDate:createDate]) {

                //是今天

                //如果创建时间加上60,大于当前时间,代表1分钟之内

                NSDate *resultDate = [createDate dateByAddingTimeInterval:60];

                if ([resultDate compare:currentDate] == NSOrderedDescending) {

                    //代表是1分钟之内

                    return @"刚刚";

                }else{

                    //判断1小时之内

                    resultDate = [createDate dateByAddingTimeInterval:3600];

                    if ([resultDate compare:currentDate] == NSOrderedDescending) {

                        //代表1小时之内

                        

                        //计算多少分钟前

                        NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];

                        //分钟数

                        NSInteger intervalMinute = interval/60;

                        return [NSString stringWithFormat:@"%zd分钟前",intervalMinute];

                    }else{

                        //几小时前

                        NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];

                        //分钟数

                        NSInteger intervalMinute = interval/3600;

                        return [NSString stringWithFormat:@"%zd小时前",intervalMinute];

                    }

                }

                

                

                //是不是1分钟之内

                

                //是不是1小时之内

                

            }else{

                //如果是昨天-->昨天 11:11

                if ([self isYesterdayWithDate:createDate]) {

                    //不是今天先这么去显示:08-01 15-03

                    formatter.dateFormat = @"昨天 HH:mm";

                    return [formatter stringFromDate:createDate];

                }else{

                    //不是今天先这么去显示:08-01 15-03

                    formatter.dateFormat = @"MM-dd HH:mm";

                    return [formatter stringFromDate:createDate];

                }

            }

        }else{

            //不是今年:2014-05-05 09:17:31

            formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

            return [formatter stringFromDate:createDate];

        }

    }

     

    /**

     *  是否是与当前时间是同一年

     *

     *  @param date 传入对比的时间

     *

     *  @return <#return value description#>

     */

    - (BOOL)isThisYearWithDate:(NSDate *)date{

        

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        formatter.dateFormat = @"yyyy";

        

        //当前w创建的时间

        NSDate *createDate = date;

        //取出当前时间

        NSDate *currentDate = [NSDate date];

        

        //拿着创建时间与当前时间进行对比-->只格式化年份

        formatter.dateFormat = @"yyyy";

        

        //取出年份-->判断是否同一年,只要拿着年份进行对比一下,看一下是否一样

        NSString *createDateYearStr = [formatter stringFromDate:createDate];

        NSString *currentDateYearStr = [formatter stringFromDate:currentDate];

        

        //对比年份的时间字符串,如果不是同一年的话返回NO

        return [createDateYearStr isEqualToString:currentDateYearStr];

    }

     

     

    /**

     *  判断与今天否是同一天,是否是今天

     *

     *  @param date

     *

     *  @return

     */

    - (BOOL)isTodayWithDate:(NSDate *)date{

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        //拿着创建时间与当前时间进行对比-->只格式化年份-月份-

        formatter.dateFormat = @"yyyy-MM-dd";

        //当前wei创建的时间

        NSDate *createDate = date;

        //取出当前时间

        NSDate *currentDate = [NSDate date];

        

        //取出年份-->判断是否是今天,

        NSString *createDateYearStr = [formatter stringFromDate:createDate];

        NSString *currentDateYearStr = [formatter stringFromDate:currentDate];

        

        //对比年份的时间字符串,如果不是同一年的话返回NO

        return [createDateYearStr isEqualToString:currentDateYearStr];

    }

     

     

    /**

     *  与当前时间对比,判断是否是昨天

     *

     *  @param date <#date description#>

     *

     *  @return <#return value description#>

     */

    - (BOOL)isYesterdayWithDate:(NSDate *)date{

        

        //2014-09-30 10:00:00 创建时间

        //2014-10-01 09:00:00 当前

        

        NSDate *currentDate = [NSDate date];

        

        //取出当前日历对象

        NSCalendar *canlendar = [NSCalendar currentCalendar];

        //NSCalendarUnit 对比单位-->要对比些什么东西

        

        //设置对比对象

        NSCalendarUnit unit = NSCalendarUnitYear|NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;

        

        //时间比较的结果

        NSDateComponents *components = [canlendar components:unit fromDate:date toDate:currentDate options:NSCalendarWrapComponents];

        //对比两个时间的day差值是否为

    //    NSLog(@"day=%zd,hour=%zd,minute=%zd,second=%zd",components.day,components.hour,components.minute,components.second);

        return components.day == 1;

    }

     

    二种方式:

     

    //重写timegetter 方法

    // 1 判断addtime和当前的时间差

            //如果时间差小于60分钟    返回 n分钟前

            //如果超过60分钟 小于24小时   返回n小时前

            //如果超过24小时     返回  -

    - (NSString *)time{

        //json中的数字时间 转换成日期对象

        NSDate *date = [NSDate dateWithTimeIntervalSince1970:[self.addtime intValue]];

        

        //计算date和当前的时间差

        NSCalendar *calendar = [NSCalendar currentCalendar];

        //获取两个时间相差的分钟

        NSDateComponents *component = [calendar components:NSCalendarUnitMinute fromDate:date toDate:[NSDate date] options:0];

        if (component.minute < 60) {

            return [NSString stringWithFormat:@"%zd分钟前",component.minute];

        }

        

        //判断相差的小时

        component = [calendar components:NSCalendarUnitHour fromDate:date toDate:[NSDate date] options:0];

        if (component.hour < 24) {

            return [NSString stringWithFormat:@"%zd小时前",component.hour];

        }

     

        //

        NSDateFormatter *ndf = [NSDateFormatter new];

        ndf.dateFormat = @"MM-dd";

        return [ndf stringFromDate:date];

    }

     

     

  • 相关阅读:
    解决mybatis xml文件代码提示
    SVN cleanup failed–previous operation has not finished; run cleanup if it was interrupted
    有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?
    mybatis如何在控制台打印执行的sql语句
    Ionic2如何下拉刷新和上拉加载
    Ionic 如何把左上角的按钮去掉?
    Ionic1与Ionic2
    java的四种引用,强弱软虚
    equals变量在前面或者在后面有什么区别吗?这是一个坑点
    Java基础—复用类
  • 原文地址:https://www.cnblogs.com/supersr/p/4856527.html
Copyright © 2020-2023  润新知