iOS objective-c 取当前时间计算年龄时间差

作者:简简单单 2015-07-08

实例一:iOS 获取当前时间以及计算年龄

获取当前时间

    NSDate *now = [NSDate date];  
    NSLog(@”now date is: %@”, now);  
      
    NSCalendar *calendar = [NSCalendar currentCalendar];  
    NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;  
    NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];  
      
    int year = [dateComponent year];  
    int month = [dateComponent month];  
    int day = [dateComponent day];  
    int hour = [dateComponent hour];  
    int minute = [dateComponent minute];  
    int second = [dateComponent second];  
      
    NSLog(@”year is: %d”, year);  
    NSLog(@”month is: %d”, month);  
    NSLog(@”day is: %d”, day);  
    NSLog(@”hour is: %d”, hour);  
    NSLog(@”minute is: %d”, minute);  
    NSLog(@”second is: %d”, second);  

计算年龄

第一种只得出年份差的年龄

    //计算年龄  
    NSString *birth = @"1993-10-30";  
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];  
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];  
    //生日  
    NSDate *birthDay = [dateFormatter dateFromString:birth];  
    //当前时间  
    NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];  
    NSDate *currentDate = [dateFormatter dateFromString:currentDateStr];  
    NSLog(@"currentDate %@ birthDay %@",currentDateStr,birth);  
    NSTimeInterval time=[currentDate timeIntervalSinceDate:birthDay];  
    int age = ((int)time)/(3600*24*365);  
    NSLog(@"year %d",age);  


第二种得出具体到天的年龄

    NSCalendar *calendar = [NSCalendar currentCalendar];//定义一个NSCalendar对象  
          
        NSDate *nowDate = [NSDate date];  
          
        NSString *birth = @"1900-10-30";  
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];  
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];  
        //生日  
        NSDate *birthDay = [dateFormatter dateFromString:birth];  
          
        //用来得到具体的时差  
        unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;  
        NSDateComponents *date = [calendar components:unitFlags fromDate:birthDay toDate:nowDate options:0];  
          
        if([date year] >0)  
        {  
            NSLog(@"%@",[NSString stringWithFormat:(@"%ld岁%ld月%ld天"),(long)[date year],(long)[date month],(long)[date day]]) ;  
        }  
        else if([date month] >0)  
        {  
            NSLog(@"%@",[NSString stringWithFormat:(@"%ld月%ld天"),(long)[date month],(long)[date day]]);  
        }  
        else if([date day]>0){  
            NSLog(@"%@",[NSString stringWithFormat:(@"%ld天"),(long)[date day]]);  
        }  
        else {  
           NSLog(@"0天");  
        }  



字符串、日期、Int转换


1、字符串转换为日期

NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//设定时间格式,这里可以设置成自己需要的格式
NSDate *date =[dateFormat dateFromString:@"1980-01-01 00:00:01"];

2、日期转换为字符串

NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//设定时间格式,这里可以设置成自己需要的格式
NSString *currentDateStr = [dateFormat stringFromDate:[NSDate date]];

3、字符串转int

Convert NSString to int
NSString *aNumberString = @"123";
int i = [aNumberString intValue];

4、int转字符串

Convert int to NSString
int aNumber = 123;
NSString *aString = [NSString stringWithFormat:@"%d", aNumber];



实例二:iOS 计算某个时间点与现在的时间差  

/*处理返回应该显示的时间*/
+ (NSString *) returnUploadTime:(NSDictionary *)dic
{
    //Tue May 21 10:56:45 +0800 2013
    NSString *timeStr = [dic objectForKey:@"created_at"];
    
    NSDateFormatter *date=[[NSDateFormatter alloc] init];
    [date setDateFormat:@"E MMM d HH:mm:SS Z y"];
    NSDate *d=[date dateFromString:timeStr];
    
    NSTimeInterval late=[d timeIntervalSince1970]*1;
    
    
    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
    NSTimeInterval now=[dat timeIntervalSince1970]*1;
    NSString *timeString=@"";
    
    NSTimeInterval cha=now-late;
    
    if (cha/3600<1) {
        timeString = [NSString stringWithFormat:@"%f", cha/60];
        timeString = [timeString substringToIndex:timeString.length-7];
        timeString=[NSString stringWithFormat:@"%@分钟前", timeString];
        
    }
    if (cha/3600>1&&cha/86400<1) {
//        timeString = [NSString stringWithFormat:@"%f", cha/3600];
//        timeString = [timeString substringToIndex:timeString.length-7];
//        timeString=[NSString stringWithFormat:@"%@小时前", timeString];
        NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
        [dateformatter setDateFormat:@"HH:mm"];
        timeString = [NSString stringWithFormat:@"今天 %@",[dateformatter stringFromDate:d]];
        [dateformatter release];
    }
    if (cha/86400>1)
    {
//        timeString = [NSString stringWithFormat:@"%f", cha/86400];
//        timeString = [timeString substringToIndex:timeString.length-7];
//        timeString=[NSString stringWithFormat:@"%@天前", timeString];
        NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
        [dateformatter setDateFormat:@"YY-MM-dd HH:mm"];
        timeString = [NSString stringWithFormat:@"%@",[dateformatter stringFromDate:d]];
        [dateformatter release];
    }
    [date release];
    return timeString;
}


实例三:IOS 计算当前时间与某时间的时间差

    - (int)intervalSinceNow: (NSString *) theDate    
    {    
            
        NSDateFormatter *date=[[NSDateFormatter alloc] init];    
        [date setDateFormat:@"yyyy-MM-dd HH:mm:ss"];    
        NSDate *d=[date dateFromString:theDate];    
            
        NSTimeInterval late=[d timeIntervalSince1970]*1;    
            
            
        NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];    
        NSTimeInterval now=[dat timeIntervalSince1970]*1;    
        NSString *timeString=@"";    
            
        NSTimeInterval cha=now-late;    
        
        if (cha/86400>1)    
        {    
            timeString = [NSString stringWithFormat:@"%f", cha/86400];    
            timeString = [timeString substringToIndex:timeString.length-7];    
            return [timeString intValue];    
        }    
        return -1;    
    }    




上面的例子只是计算相差了几天


当然可以计算其他数值

cha/3600<1   分钟

if (cha/3600>1&&cha/86400<1) 小时


// 获取当前日期
NSDate *date = [NSDate date];
// 打印结果: 当前时间 date = 2013-08-16 09:00:04 +0000
NSLog(@"当前时间 date = %@",date);
// 获取从某个日期开始往前或者往后多久的日期,此处60代表60秒,如果需要获取之前的,将60改为-60即可
date = [[NSDate alloc] initWithTimeInterval:60 sinceDate:[NSDate date]];
//打印结果:当前时间 往后60s的时间date = 2013-08-16 09:01:04 +0000
NSLog(@"当前时间 往后60s的时间date = %@",date);

PS:测试时时间是下午5点,但是得到的当前时间却是上午9点,相差了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);

相关文章

精彩推荐