0

セットアップは次のとおりです。使用している JSON フィードがあり、 と という 2 つの特定の日付の違いを見つけたいと考えてい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')への最初の 2 回の呼び出しで、次のエラーが発生しNSTimeIntervalます。

私はいくつかの場所で間違っていると確信しており、これが最も簡単な方法ではないと確信しています。この問題を修正する方法、または日付間の違いを取得するためのより簡単な方法を誰かが推奨できますか?

4

2 に答える 2

2

エラーは、次のような行から発生します。

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

彼らはする必要があります:

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

または、もっと簡単に言えば、これら 2 つの差分変数をまったく定義せずに、次のように使用します。

NSTimeInterval timeDifferenceInSeconds = [endDateAmmended timeIntervalSinceDate:startDateAmmended];

2 つの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];
}
于 2013-06-07T15:19:35.220 に答える
1

NSDate次のように、2 つのオブジェクトの差を秒単位で取得できます。

double difference = [startDateAmmended timeIntervalSinceDate:endDateAmmended];

部分文字列操作では時間がなく、日付だけがあることに注意してください。したがって、difference秒単位ですが、1日のステップになります。

于 2013-06-07T15:08:35.070 に答える