2017-01-25 12 views
0

내 응용 프로그램에서 JSON 응답에서 오는 주어진 날짜로부터 요일, 시간, 분 및 초를 알아야합니다.주어진 날짜로부터 남은 일,시, 분, 초를 계산하는 방법은 무엇입니까?

"date_time" = "2017-01-31 08:30:00"; 

와 일처럼 나머지 계산해야합니다 : 6 시간 : 18분 : 24초 : 30

종료 날짜가 오늘 날짜 수 아래에서 내가지고있어 날짜와 시간입니다. 아래 코드를 시도했지만 마이너스 (UTC 시간대가 걸린다 고 생각합니다.) 시간을 주었고 많은 답변을 시도했습니다.

NSString *start = [[self.eventsArray valueForKey:@"date_time"]objectAtIndex:0]; 


NSDateFormatter *date = [[NSDateFormatter alloc] init]; 
[date setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSString *end = [date stringFromDate:[NSDate date]]; 


NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *startDate = [f dateFromString:start]; 
NSDate *endDate = [f dateFromString:end]; 


NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay 
                fromDate:startDate 
                 toDate:endDate 
                options:0]; 
NSLog(@"day : %ld H: %ld M : %ld S:%ld", [components day], (long)[components hour],(long)[components minute],(long)[components second]); 

누군가가 도와주세요. 당신은 여기에 실수를하고있다

+0

값 dateFromString됩니다 시작과 끝은 오늘 날짜 될 것입니다. – Nij

+0

NSDateComponentsFormatter를 살펴보십시오. – vadian

답변

2

, [NSDate date] 즉 및 toDatefromDate 있어야 오늘 날짜는 startDate 될 것입니다. 따라서 코드는 이와 같아야합니다. 의 startDate와 endDate가의

NSString *end = [[self.eventsArray valueForKey:@"date_time"]objectAtIndex:0]; 

NSDateFormatter *date = [[NSDateFormatter alloc] init]; 
[date setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
//Start date 
NSDate *startDate = [NSDate date]; 
NSDate *endDate = [f dateFromString:end]; 


NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond 
                fromDate:startDate 
                 toDate:endDate 
                options:0]; 
NSLog(@"day : %ld H: %ld M : %ld S:%ld", [components day], (long)[components hour],(long)[components minute],(long)[components second]); 
+0

말은 'NSDate * startDate = [f dateFromString : start]; NSDate * endDate = [f dateFromString : end]; ' – Nij

+0

@ Nij 귀하의 보낸 날짜는 오늘 날짜이므로 귀하가 Reaming 일을 얻을 수 있습니다. –

+0

@ Nij 분당 초 구성 요소를 추가해야합니다. 초에 대한 편집 된 답변을 확인하십시오. –

0

방법은 아래 전화 및 통과 날짜

+(NSMutableString*) timeLeftSinceDate: (NSDate *) dateT { 

    NSMutableString *timeLeft = [[NSMutableString alloc]init]; 

    NSDate *today10am = [NSDate date]; 

    today10am = [self getPickerDateForString:[self getPickerDateForDate:today10am]]; 

    NSInteger seconds = [today10am timeIntervalSinceDate:dateT]; 

    NSInteger days = (int) (floor(seconds/(3600 * 24))); 
    if(days) seconds -= days * 3600 * 24; 

    NSInteger hours = (int) (floor(seconds/3600)); 
    if(hours) seconds -= hours * 3600; 

    NSInteger minutes = (int) (floor(seconds/60)); 
    if(minutes) seconds -= minutes * 60; 

    if(days) { 
     [timeLeft appendString:[NSString stringWithFormat:@"%ld Days ago", (long)days]]; 
    }else if(hours) { 
     [timeLeft appendString:[NSString stringWithFormat: @"%ld h ago", (long)hours]]; 
    }else if(minutes) { 
     [timeLeft appendString: [NSString stringWithFormat: @"%ld m ago",(long)minutes]]; 
    }else if(seconds) { 
     [timeLeft appendString:[NSString stringWithFormat: @"Just now"]]; 
    } 

    return timeLeft; 
} 

+ (NSString *)getPickerDateForDate:(NSDate *)dateVal 
{ 
    NSString * stringVal; 
    if (!dateFormatter) 
    { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
    } 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

    dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 

    stringVal = [dateFormatter stringFromDate:dateVal]; 
    return stringVal; 
} 
+ (NSDate *)getPickerDateForString:(NSString *)dateString 
{ 
    NSDate * stringVal; 
    if (!dateFormatter) 
    { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
    } 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    dateFormatter.timeZone = [NSTimeZone systemTimeZone]; 

    stringVal = [dateFormatter dateFromString:dateString]; 
    return stringVal; 

}