NSDate与NSString的转换以及业务上几种常见时间转换需求

首先了解下NSDate的初始化:

// 获取当前日期    

NSDate *date = [NSDate date];  

 // 打印结果: 当前时间 date = 2016-06-16 11:00:04 +0000    

NSLog(@"当前时间 date = %@",date);   

// 获取从某个日期开始往前或者往后多久的日期,此处60代表60秒,如果需要获取之前的,将60改为-60即可    

date = [[NSDate alloc] initWithTimeInterval:60 sinceDate:[NSDate date]];   

//打印结果:当前时间 往后60s的时间date = 2016-06-16 11:01:04 +0000          

NSLog(@"当前时间 往后60s的时间date = %@",date);  

注:有可能会出现时区上的问题--跟实际时间相差8小时的问题,遇到这种情况可:

NSTimeZone *zone = [NSTimeZone systemTimeZone]; 

  

NSInteger interval = [zone secondsFromGMTForDate: date];    


NSDate *localDate = [date  dateByAddingTimeInterval: interval];   


// 打印结果 正确当前时间 

localDate = 2013-08-16 17:01:04 +0000   

NSLog(@"正确当前时间 localDate = %@",localDate);  


NSDate与NSString的转换

/*---- NSDateNSString---*/

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


// 设置日期格式   

[dateFormatter setDateFormat:@"年月日 YYYY/mm/dd 时间 hh:mm:ss"];   

NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];   


// 打印结果:dateString = 年月日 2013/10/16 时间 05:15:43   

NSLog(@"dateString = %@",dateString);   


// 设置日期格式   

[dateFormatter setDateFormat:@"YYYY-MM-dd"];   

NSString *year = [dateFormatter stringFromDate:[NSDate date]];   


// 打印结果:年月日 year = 2013-08-16   

NSLog(@"年月日 year = %@",year);   


// 设置时间格式   

[dateFormatter setDateFormat:@"hh:mm:ss"];  

NSString *time = [dateFormatter stringFromDate:[NSDate date]];  


/ / 打印结果:时间 time = 05:15:43    

NSLog(@"时间 time = %@",time);  

几种常见时间转换的工厂方法:

//根据传入的格式以及时间戳返回对应的时间字符串

+ (NSString *)getStartTimeDate:(double)dateTime format:(NSString *)format{

    if (format == nil) {

        format = @"yyyy/MM/dd";

    }

    NSTimeInterval time= dateTime;//因为时差问题要加8小时 == 28800 sec

    NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];

    //实例化一个NSDateFormatter对象

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

    //设定时间格式,这里可以设置成自己需要的格式 @"yyyy/MM/dd"

    [dateFormatter setDateFormat:format];

    NSString *currentDateStr = [dateFormatter stringFromDate: detaildate];

    return currentDateStr;

}


//
返回时间戳  时间字符串转为时间戳,具体时间格式自行设置

(NSString *)returnTimestamp:(NSString *)timeStr{

    //实例化一个NSDateFormatter对象

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

    //设定时间格式,这里可以设置成自己需要的格式

    [dateFormatter setDateFormat:@"yyyy-MM-dd"];

    NSDate *date = [dateFormatter dateFromString:timeStr];

    NSTimeInterval timeSp = [date timeIntervalSince1970];

    return [NSString stringWithFormat:@"%f",timeSp];

}


/*处理返回应该显示的时间*/  xx分钟前 xx小时前  xx天前

+ (NSString *) returnUploadTime:(NSString *)timeStr

{

    NSTimeInterval time= [timeStr doubleValue];//因为时差问题要加8小时 == 28800 sec

    NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];

    //实例化一个NSDateFormatter对象

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

    //设定时间格式,这里可以设置成自己需要的格式

    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];

    NSString *currentDateStr = [dateFormatter stringFromDate: detaildate];

    NSDate *datenow = [NSDate date];

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

    //指定输出的格式   这里格式必须是和上面定义字符串的格式相同,否则输出空

    [dm setDateFormat:@"YYYY-MM-dd HH:mm:ss"];

    NSDate * newdate = [dm dateFromString:currentDateStr];

    long dd = (long)[datenow timeIntervalSince1970] - [newdate timeIntervalSince1970];

    NSString *timeString=@"";

    if (dd/3600<1)

    {

        timeString = [NSString stringWithFormat:@"%ld", dd/60];

        timeString=[NSString stringWithFormat:@"%@分钟前", timeString];

    }

    if (dd/3600>1&&dd/86400<1)

    {

        timeString = [NSString stringWithFormat:@"%ld", dd/3600];

        timeString=[NSString stringWithFormat:@"%@小时前", timeString];

    }

    if (dd/86400>1)

    {

        timeString = [NSString stringWithFormat:@"%ld", dd/86400];

        timeString=[NSString stringWithFormat:@"%@天前", timeString];

    }

    return timeString;

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值