IOS日期转为今天昨天形式

最近项目有类似QQ空间展示动态的UI,模仿了QQ空间的时间显示,在此记录,以备查阅。

这是QQ空间的ui:

时间显示为:

1.今天-->今天 xx:xx(今天 15:39)

2.昨天-->昨天 xx:xx(昨天 06:00)

3.前天-->前天 xx:xx(前天 19:00)

4.同一年, 例如:同一年的一月三号-->01-03 xx:xx(01-03 12:29)

5.不在同一年 --> xxxx-xx-xx(2014-12-12)

程序运行效果如下,以下为简单的测试,没有ui界面:

下面的代码是在网上已有代码的基础上更改而来,原代码点此查看

/**
 *  仿QQ空间时间显示
 *  @param string eg:2015年5月24日 02时21分30秒
 */
- (NSString *)format:(NSString *)string{
    NSDateFormatter *inputFormatter= [[NSDateFormatter alloc] init];
    [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ];
    [inputFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];
    NSDate*inputDate = [inputFormatter dateFromString:string];
    //NSLog(@"startDate= %@", inputDate);

    NSDateFormatter *outputFormatter= [[NSDateFormatter alloc] init];
    [outputFormatter setLocale:[NSLocale currentLocale]];
    [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    //get date str
    NSString *str= [outputFormatter stringFromDate:inputDate];
    //str to nsdate
    NSDate *strDate = [outputFormatter dateFromString:str];
    //修正8小时的差时
    NSTimeZone *zone = [NSTimeZone systemTimeZone];
    NSInteger interval = [zone secondsFromGMTForDate: strDate];
    NSDate *endDate = [strDate  dateByAddingTimeInterval: interval];
    //NSLog(@"endDate:%@",endDate);
    NSString *lastTime = [self compareDate:endDate];
    NSLog(@"lastTime = %@",lastTime);
    return str;
}

-(NSString *)compareDate:(NSDate *)date{

    NSTimeInterval secondsPerDay = 24 * 60 * 60;

    //修正8小时之差
    NSDate *date1 = [NSDate date];
    NSTimeZone *zone = [NSTimeZone systemTimeZone];
    NSInteger interval = [zone secondsFromGMTForDate: date1];
    NSDate *localeDate = [date1  dateByAddingTimeInterval: interval];

    //NSLog(@"nowdate=%@\nolddate = %@",localeDate,date);
    NSDate *today = localeDate;
    NSDate *yesterday,*beforeOfYesterday;
    //今年
    NSString *toYears;

    toYears = [[today description] substringToIndex:4];

    yesterday = [today dateByAddingTimeInterval: -secondsPerDay];
    beforeOfYesterday = [yesterday dateByAddingTimeInterval: -secondsPerDay];

    // 10 first characters of description is the calendar date:
    NSString *todayString = [[today description] substringToIndex:10];
    NSString *yesterdayString = [[yesterday description] substringToIndex:10];
    NSString *beforeOfYesterdayString = [[beforeOfYesterday description] substringToIndex:10];

    NSString *dateString = [[date description] substringToIndex:10];
    NSString *dateYears = [[date description] substringToIndex:4];

    NSString *dateContent;
    if ([dateYears isEqualToString:toYears]) {//同一年
        //今 昨 前天的时间
        NSString *time = [[date description] substringWithRange:(NSRange){11,5}];
        //其他时间
        NSString *time2 = [[date description] substringWithRange:(NSRange){5,11}];
        if ([dateString isEqualToString:todayString]){
            dateContent = [NSString stringWithFormat:@"今天 %@",time];
            return dateContent;
        } else if ([dateString isEqualToString:yesterdayString]){
            dateContent = [NSString stringWithFormat:@"昨天 %@",time];
            return dateContent;
        }else if ([dateString isEqualToString:beforeOfYesterdayString]){
            dateContent = [NSString stringWithFormat:@"前天 %@",time];
            return dateContent;
        }else{
            return time2;
        }
    }else{
        return dateString;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 03:35:33

IOS日期转为今天昨天形式的相关文章

IOS --- 日期时间格式 转换

1.如何如何将一个字符串如" 20110826134106"装化为任意的日期时间格式,下面列举两种类型: NSString* string [email protected]"20110826134106"; NSDateFormatter*inputFormatter = [[[NSDateFormatter alloc] init]autorelease]; [inputFormattersetLocale:[[[NSLocale alloc] initWith

placeholder的字体样式改变,滚动条的颜色改变,ios日期兼容

placeholder: ::-webkit-input-placeholder { color: rgba(153, 153, 153, 0.541);font-size:12px;}:-moz-placeholder {color: rgba(153, 153, 153, 0.541);font-size:12px;}::-moz-placeholder {color: rgba(153, 153, 153, 0.541);font-size:12px;}:-ms-input-placeho

BIP_Case_将原有Report Builer报表全部转为XML Publisher形式

一.案例分析 Oracle Report Builder  因落伍的技术和糟糕的交互性,特别是无法随心所欲的进行排版,逐渐被淘汰,而BI(XML) Publisher  也是其中的一种替代技术, 此文介绍了如何将Report Builder建立的RDF文件转换成最新的XML Publisher所使用的xml data definition 和 rtf template definition,从而实现数据源和输出模板分离,从而将原有难易维护的report builder 替代为易维护的XML Pu

将参数字典排序,并转为 GET 参数形式.

1.创建 NSString 分类 @interface NSString (WBRequest) - (NSString *)URLEncodedString; - (NSString *)URLEncodedStringWithCFStringEncoding:(CFStringEncoding)encoding; @end @implementation NSString (WBRequest) - (NSString *)URLEncodedString { return [self UR

【华为练习题】十六进制字符串形式转为内存值形式

[华为练习题]十六进制字符串形式转为内存值形式 题目 功能:将十六进制字符串形式内容转为内存值形式(注:pBuffer的内存申请由调用者保证) 输入:szHexText:十六进制字符串形式,如: "6566" 输出:dataOutput,其中:内存值形式Buffer,即内存的{0x65, 0x66} 返回:返回转换成功的buffer的有效字节数 解答 #include <iostream> #include <string> using namespace st

IOS 日期的简洁格式展示

首先我要解释一下标题的意义,日期的简洁格式展示,之所以简介,是因为让人一目了然,不需要思考是什么时候. 在详细一点就是我们在微信朋友圈中 所看到的时间格式. 例如:刚刚 -几分钟前-几小时前等等. 今天这里带来的是一个简单的类别. 方便实用. 以及简单的实际应用. 先看看一看类别是什么样子的 .h #import <Foundation/Foundation.h> @interface NSDate (CXExtension) -(NSDateComponents *)dateFrom:(NS

ios日期格式转换

转自:http://blog.csdn.net/l_ch_g/article/details/8217725 1.如何如何将一个字符串如“ 20110826134106”装化为任意的日期时间格式,下面列举两种类型: NSString* string = @"20110826134106"; NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease]; [inputFormatter set

iOS日期转换之UTC/GMT时间格式

GMT只需要将代码中的UTC替换为GMT即可 //将本地日期字符串转为UTC日期字符串 //本地日期格式:2013-08-03 12:53:51 //可自行指定输入输出格式 -(NSString *)getUTCFormateLocalDate:(NSString *)localDate { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //输入格式 [dateFormatter setDateFormat:@"

iOS 日期处理 - 解析日期

要从一个字符串中解析得到准确的时间,必须要指定正确的格式字符串,以及对应的时区标示 1.日期格式 1.年 y 将年份 (0-9) 显示为不带前导零的数字 yy 以带前导零的两位数字格式显示年份 yyy 以四位数字格式显示年份 yyyy 以四位数字格式显示年份 2.月 M 将月份显示为不带前导零的数字(如一月表示为 1) MM 将月份显示为带前导零的数字(例如 01/12/01) MMM 将月份显示为缩写形式(例如 Jan) MMMM 将月份显示为完整月份名(例如 January) 一月 Jan