libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSDateと日時の扱い (4/6)

作成:2011-02-13 12:22
更新:2011-11-13 21:26

■日時の計算をする

では、日時を使った計算はどのように行えばいいのでしょうか。「計算」というとイメージしにくいでしょうが、例えば「◯◯年◯月◯日から△△日後は何日か?」とか、「◯◯年◯月◯日から△△年△月△日まで何日あるか」というような計算ですね。

まずは、「◯◯年◯月◯日から△△日後は何日か?」という計算からです。これは、用意したNSDateに、時間を足したり引いたりする計算ですね。これは「dateByAddingTimeInterval:」というメソッドを使います。
NSDate* 変数 = [《NSDate*》 dateByAddingTimeInterval:《NSTimeInterval》 ];
引数に時間の長さを示す「NSTimeInterval」という値を指定すると、そのNSDateから指定の時間経過後の日時を示すNSDateを返します。このNSTimeIntervalというのは、実はただのdouble値で、「秒数」を示す値です。例えば1日なら、60秒×60分×24時間=86400になります。
        NSDate* date = [NSDate date];
        NSTimeInterval t = 60 * 60 * 24 * 1000; // 1000日
        NSDate* date2 = [date dateByAddingTimeInterval:t];
        NSLog(@"%@",date2);
例えば、これは今日から1000日後の日付を求める例です。NSTimeIntervalには60 * 60 * 24 * 1000の値を設定し、これをdateByAddingTimeInterval:で加算します。非常に簡単ですね。

では、「今から1000日前はどうするのか?」と思った人。簡単です。NSTimeIntervalの値に-1をかければいいんですよ。マイナスになれば、それだけの長さを引くことになりますからね。


■2つの日時の差を求める

続いて、「◯◯年◯月◯日から△△年△月△日まで何日あるか」という計算です。つまり、2つの日時の差を求める計算ですね。これも、NSDateに用意されているメソッドを使って簡単に行なえます。
NSTimeInterval 変数 = [《NSDate*》 timeIntervalSinceDate:《NSDate*》];
これで、2つの日時の経過秒数がNSTimeIntervalで得られます。このNSTimeIntervalは、実はただのdoubleですから、そのまま1日の秒数で割り算すれば、日数が得られる、というわけです。
        NSDate* date = [NSDate date];
        NSDate* date2 = [NSDate
                         dateWithNaturalLanguageString:@"2001/1/1"];
        NSTimeInterval t = [date
                            timeIntervalSinceDate:date2];
        NSInteger days = (int)(t / (60 * 60 * 24));
        NSLog(@"%ld days.",days);
例えば、これは2001年元旦から今日までの日数を計算するものです。ここでは、今日のほうが大きい値(後の日付)なので結果は正の値になりますが、昔の日時から最近の日時を引き算すれば結果はマイナスになりますので注意しましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※今日から1000日後を計算する

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* date = [NSDate date];
        NSTimeInterval t = 60 * 60 * 24 * 1000; // 1000日
        NSDate* date2 = [date dateByAddingTimeInterval:t];
        NSLog(@"%@",date2);
	}
    return 0;
}


※2001年元旦から今日までの日数を計算する

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* date = [NSDate date];
        NSDate* date2 = [NSDate 
                         dateWithNaturalLanguageString:@"2001/1/1"];
        NSTimeInterval t = [date 
                            timeIntervalSinceDate:date2];
        NSInteger days = (int)(t / (60 * 60 * 24));
        NSLog(@"%ld days.",days);
	}
    return 0;
}
※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る