2014-06-11 2 views
0

댓글을 추가 한 후 1 년 전, 1 일 전, 1 분 전, 2 월 전과 같은 댓글 타이밍을 표시해야하지만 -4425, -33434 초 전 "임의 숫자"를 반환합니다.NSTimeInterval이 잘못된 시간 간격을 표시합니다.

아래 코드는 내 앱에서 사용하고 있습니다.

NSString *inDateStr = [NSString stringWithFormat:@"%@",[[[dict objectForKey:@"d"] objectAtIndex:indexPath.row-1] objectForKey:@"created"]]; 
NSString *s = @"yyyy-MM-dd HH:mm:ss"; 

// about input date(GMT) 
NSDateFormatter *inDateFormatter = [[NSDateFormatter alloc] init]; 
inDateFormatter.dateFormat = s; 
inDateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT-7.00"]; 
NSDate *inDate = [inDateFormatter dateFromString:inDateStr]; 

// about output date(IST) 
NSDateFormatter *outDateFormatter = [[NSDateFormatter alloc] init]; 
outDateFormatter.timeZone = [NSTimeZone localTimeZone]; 
outDateFormatter.dateFormat = s; 
NSString *outDateStr = [outDateFormatter stringFromDate:inDate]; 

// final output 
NSLog(@"[in]%@ -> [out]%@", inDateStr, outDateStr); 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *dateStartingString = [[NSDate alloc] init]; 
NSString *datestartString = outDateStr; 

dateStartingString = [dateFormatter dateFromString:datestartString]; 

NSTimeInterval timeDifference = [[NSDate date] timeIntervalSinceDate:dateStartingString]; 



double minutes = timeDifference/60; 
double hours = minutes/60; 
double seconds = timeDifference; 
double days = minutes/1440; 

UILabel * dateLbl=[[UILabel alloc] initWithFrame:CGRectMake(155, [[CountArr objectAtIndex:indexPath.row] floatValue]-1, 80, 20)]; 
if(seconds>=86400) 
    dateLbl.text=[NSString stringWithFormat:@"%.0f days ", days]; 
else if(seconds>=3600 && seconds<86400) 
    dateLbl.text=[NSString stringWithFormat:@"%.0f hours ", hours]; 
else if (seconds>=60 && seconds<3600) 
    dateLbl.text=[NSString stringWithFormat:@"%.0f minutes ", minutes]; 
else 
    dateLbl.text=[NSString stringWithFormat:@"%.0f seconds ", seconds]; 

dateLbl.textColor=[UIColor lightGrayColor]; 
dateLbl.font = [UIFont systemFontOfSize:12]; 
[cell.contentView addSubview:dateLbl]; 

답변

0

NSDateFormatter는 문자열을 사용하고 NSDate 객체 만 반환한다고 생각합니다. 표준 시간대 설정은 NSDate 속성을 설정하기위한 것이지만 실제로 제공된 시간은 변환하지 않습니다. 그래서 결국 5시 30 분 (그리니치 표준시)에 넣으면 5시 IST를 받게됩니다.

대신 NSCalender를 사용하여 시간대 변환을 수행하려고합니다.

0

이 방법을 사용하면 날짜가 달라집니다.
날짜 형식이 올바른지 확인하십시오. 음수 값을 얻는다면 날짜 형식을 확인하십시오.

-(NSDateComponents *)getDateDifference:(NSString *)date 
{ 
    NSDate *dateA=[NSDate date]; //Current date 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dateB = [dateFormatter dateFromString:date];//Convert nsstring to nsdate 


    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; //Gregorian allocation 
    NSDateComponents *components = [calendar components:NSDayCalendarUnit|NSHourCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit 
               fromDate:dateA 
               toDate:dateB 
               options:0]; //Get day and hour 

    return components; 
} 


// Call method like 
NSDateComponents *difference = [self getDateDifference:marriageDate]; 
NSLog(@"diff year = %f",difference.year); 
+0

만약 내가 분과 초도 필요하다면? –

+0

구성 요소에 NSMinuteCalendarUnit | NSSecondCalendarUnit을 추가 할 수 있습니다. date formate는 HH : mm : ss도 추가합니다. 그 일이 있다면 알려주세요. – user3663584

+0

내 대답이 도움이된다면 대답에 투표 할 수 있습니다. – user3663584

관련 문제