2013-06-07 3 views
0

Вот настройка, у меня есть канал JSON, который я использую, и я хочу найти разницу между двумя конкретными датами: posted_date и planned_expiration_date. Они в нечетном формате, поэтому я подумал, что могу урезать их до даты. Я мог бы затем использовать NSTimeInterval, чтобы найти разницу в секундах.Проблемы с датами форматирования

// Time Interval Left 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
NSString *startDate = [firstPerson objectForKey:@"posted_date"]; 
NSString *endDate = [firstPerson objectForKey:@"planned_expiration_date"]; 

//Ammend the strings to YYYY-MM-DD 
[formatter setDateFormat:@"yyyy-mm-dd"]; 
int newlength = 9; 
NSDate *startDateAmmended =[formatter dateFromString:[startDate substringFromIndex:newlength]]; 
NSDate *endDateAmmended = [formatter dateFromString:[endDate substringFromIndex:newlength]]; 

Вот немного, о котором я не слишком уверен. Дата выглядит примерно так: "2013-06-07T13:40:01Z" прямо из фида. Я не знаю, как обращаться с символами T и Z в методе форматирования даты, поэтому я усекаю строку с помощью substringFromIndex, чтобы сделать ее 10 символов, а затем попытался выполнить следующий код.

//Difference in Date 
NSTimeInterval *startDifference = [startDateAmmended timeIntervalSinceNow]; 
NSTimeInterval *endDifference = [endDateAmmended timeIntervalSinceNow]; 

NSTimeInterval timeDifferenceInSeconds = startDifference - endDifference; 

Я получаю следующее сообщение об ошибке, .../JSONParser/ViewController.m:52:21: Initializing 'NSTimeInterval *' (aka 'double *') with an expression of incompatible type 'NSTimeInterval' (aka 'double') на первых двух вызовов NSTimeInterval.

Уверен, что я ошибаюсь в нескольких местах, и я уверен, что это не самый простой способ сделать это. Может ли кто-нибудь порекомендовать, как я исправлю эту проблему или более простой способ получить разницу между датами?

+0

Может быть, это может помочь вам: http://stackoverflow.com/questions/ 6742771/как к высчитывает-разница между ними-две даты-без использования каких-либо-готовый-библиотека-фу –

ответ

2

Ваша ошибка исходит от ваших линий, которые говорят:

NSTimeInterval *startDifference = [startDateAmmended timeIntervalSinceNow]; 
NSTimeInterval *endDifference = [endDateAmmended timeIntervalSinceNow]; 

Они должны быть:

NSTimeInterval startDifference = [startDateAmmended timeIntervalSinceNow]; 
NSTimeInterval endDifference = [endDateAmmended timeIntervalSinceNow]; 

Или, проще говоря, не определяют эти две разности переменных на всех, и просто использовать :

NSTimeInterval timeDifferenceInSeconds = [endDateAmmended timeIntervalSinceDate:startDateAmmended]; 

Для вычислить разницу между двумя ISO 8601/RFC 3339 строки с датой, вы можете сделать:

NSDate *startDate = [self dateFromISO8601String:@"2013-06-01T16:27:35Z"]; 
NSDate *endDate = [self dateFromISO8601String:@"2013-06-07T13:40:01Z"]; 

NSTimeInterval elapsed = [endDate timeIntervalSinceDate:startDate]; 
NSLog(@"Time elapsed (in seconds) is %.0f", elapsed); 

где dateFromISO8601String определяется как:

- (NSDate *)dateFromISO8601String:(NSString *)string 
{ 
    static NSDateFormatter *formatter = nil; 
    if (formatter == nil) 
    { 
     formatter = [[NSDateFormatter alloc] init]; 
     NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
     formatter.locale = enUSPOSIXLocale; 
     formatter.dateFormat = @"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"; 
     formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
    } 
    return [formatter dateFromString:string]; 
} 
1

Вы можете получить разницу в секундах между двумя NSDate объектами вроде этого:

double difference = [startDateAmmended timeIntervalSinceDate:endDateAmmended]; 

Обратите внимание, что с операцией подстроки у вас нет времени, только дату, поэтому difference будет в секундах но с целыми целыми днями.