私はObjective-Cに関する本を読んでおり、2つの日付間の経過日数を返すpalapseDaysというカテゴリをNSDateクラスに追加する演習に取り組んでいます。これが私の試みです:
-(unsigned long) elapsedDays: (NSDate *) theDate{
return ([self timeIntervalSinceDate:theDate]/3600)/24;
}
これが私のコードをテストしているプログラムのメインセクションです:
NSDate *now = [NSDate date];
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(3600*24)];
NSLog(@"%@",now);
NSLog(@"%@",yesterday);
NSLog(@"%lu",([now elapsedDays:yesterday]));
問題は、結果がゼロになり続けることです。
2012-09-22 19:28:24 +0000
2012-09-21 19:28:24 +0000
0
私はの分割が[self timeIntervalSinceDate:theDate]/3600
23.99972222222222を与えていることを理解しました。2つの日付の差は1日、つまり24時間であるため、24が得られるはずなので、これは奇妙なことです。このコードが2つの日付の間に間違った秒数を与えている理由を理解したいと思います。
除算の結果を四捨五入して修正しましたが、それでも何が悪いのかを理解したいと思います。
return round ([self timeIntervalSinceDate:theDate] / 3600) / 24;