2013年08月21日

Objective−CでNSDateクラスを使う

例えば日付を制御するNSDateクラスを使うには以下のように記述します。

NSDate *theDate = [NSDate alloc];
theDate = [theDate init];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:24:47 +0000


allocメソッドを利用しNSDateのインスタンスを作成し、initメソッドでインスタンスの初期化を行ないます。これでインスタンスであるtheDateでNsDateクラスのプロパティやメソッドが利用できるようになります。

上記の記述は以下のように一括で書くこともできます。

NSDate *theDate = [[NSDate alloc] init];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:28:49 +0000


initメソッドではなくinitWithTimeIntervalSinceNowメソッドで初期化すると指定した秒数後の日付オブジェクトが作成されます。

NSDate *theDate = [[NSDate alloc] initWithTimeIntervalSinceNow:30];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:31:03 +0000


initWithTimeIntervalSince1970メソッドでは1970年からの指定した秒数後の日付オブジェクトが作成されます。

NSDate *theDate = [[NSDate alloc] initWithTimeIntervalSince1970:100];

NSLog(@"theDate = %@",theDate);//theDate = 1970-01-01 00:01:40 +0000


通常はallocメソッドでインスタンスを生成し、イニシャライズメソッドで初期化を行ないますが、コンビニエンスコンストラクタを利用するとこれらを同時におこなってくれます。

NSDate *theDate = [NSDate date];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:36:54 +0000


NSDateFormatterクラスを利用すると任意の日付オブジェクトが取得できます。NSDateFormatterクラスのインスタンスのsetDateFormatメソッドで日付のフォーマットを与え、dateFromStringを利用することで日付のフォーマットと同じ日付オブジェクトが取得できます。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLog(@"theDay = %@",theDay);//theDay = 1999-01-30 15:12:00 +0000


NSLocaleクラスを利用することローケルの指定が可能です。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLocale *local = [NSLocale currentLocale];
NSLog(@"theDay = %@",[theDay descriptionWithLocale:local]);//theDay = Sunday, January 31, 1999, 12:12:00 AM Japan Standard Time


NSDateFormatterクラスのstringFromDateメソッドを利用すると日付オブジェクトから日付の文字列が取得できます。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLog(@"theDay = %@",[df stringFromDate:theDay]);//theDay = 1999年12月31日


NSDateオブジェクトのtimeIntervalSinceDateメソッドを利用すれば日付オブジェクト間の秒数が取得できます。

NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];
NSTimeInterval since = [theDate2 timeIntervalSinceDate:theDate1];
NSLog(@"since = %f",since);//since = 300.000014


NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];
NSTimeInterval since = [theDate1 timeIntervalSinceDate:theDate2];
NSLog(@"since = %f",since);//since = -300.000014


日付の比較はNSDateクラスのisEqualToDateメソッドで行ないます。

NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];

BOOL equal1 = [theDate1 isEqualToDate:theDate2];
NSLog(@"%d",equal1);//0

BOOL equal2 = [theDate1 isEqualToDate:theDate1];
NSLog(@"%d",equal2);//1


日付の大小の比較はNSDateクラスのisEqualToDateメソッドで行ないます。

isEqualToDateの結果はNSOrderedAscendingやNSOrderedDescending、NSOrderedSameといった定数で返ってきます。

NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];
NSComparisonResult result = [theDate1 compare:theDate2];
switch (result) {
case NSOrderedAscending:
NSLog(@"date1のほうが小さい");
break;
case NSOrderedDescending:
NSLog(@"date1のほうが大きい");
break;
case NSOrderedSame:
NSLog(@"同じ");
break;


参考:詳細! Objective-C iPhoneアプリ開発 入門ノート
posted by ねこまんま at 11:05
Comment(1) | TrackBack(0) | iPhone
この記事へのコメント
mmは分ですね。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];//@"yyyy年MM月dd日"
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLog(@"theDay = %@",theDay);//theDay = 1999-01-30 15:12:00 +0000
Posted by あかきき at 2014年02月13日 20:47
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
※半角英数字のみのコメントは投稿できません。

この記事へのトラックバック