2017-01-25 17 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

あなたの日付を渡したstartDateとendDateにの価値dateFromStringさ:開始と終了が今日の日付になります。 – Nij

+0

NSDateComponentsFormatterを見てください。 – vadian

答えて

2

あなたがここで間違っていると、あなたのfromDateは今日の日付である[NSDate date]となり、toDatestartDateとなります。だからあなたのコードは、このようなものでなければなりません。呼び出し方法下記

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あなたのfrom dateは今日の日付なので、あなたはreaming daysを得ることができます。 –

+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; 

} 
関連する問題