酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Objective-Cを使ってNSStringからNSDateへの変換/NSDateからNSStringへの変換

直近で使用したNSDate関係の処理をまとめました。

NSStringからNSDateへの変換

「2011-06-28 21:23:45」を文字列をNSDateFormatterを使ってNSDate型へ変換しました。

// フォーマットされる日付文字列
NSString* dateString = @"2011-06-28 21:23:45";

NSDateFormatter* fmt = [[[NSDateFormatter alloc] init] autorelease];
[fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // フォーマット文字列を設定

NSDate* formatterDate = [fmt dateFromString:dateString];
NSLog(@"出力:%@", formatterDate); // 出力:2011-06-28 12:23:45 +0000

文字列からフォーマットする時に不要な文字列が含まれている場合は、アポストロフィー(')で文字を挟む事でNSDateFormatterに無視させる事が可能です。以前書いた下記の記事をご参照ください。


NSDateからNSStringへの変換

NSDateからNSStringへ変換する際にもNSDateFormatterを使う事が出来ます。

// 今日の日付
NSDate* nowDate = [NSDate date];

NSDateFormatter *fmt = [[[NSDateFormatter alloc] init] autorelease];
[fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // どんな文字列で取り出すかを設定
NSString* dateString = [fmt stringFromDate:nowDate];
NSLog(@"出力:%@", dateString); // 出力:2011-06-28 18:40:39	

指定月の末日を求める

直接、指定月の末日を求める事は出来ません。例えば2011年6月の末日を調べる場合は、その次の7月1日から1日引いてやります。

// フォーマットされる日付文字列(2011年7月1日)
NSString* dateString = @"20110701";

// 一旦、2011年7月1日でNSDateを作成する
NSDateFormatter* fmt = [[[NSDateFormatter alloc] init] autorelease];
[fmt setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[fmt setDateFormat:@"yyyyMMdd"]; // フォーマット文字列を設定
NSDate* formatterDate = [fmt dateFromString:dateString];

// 1日前へ巻き戻す(マイナス86400秒)
formatterDate = [formatterDate addTimeInterval:-1*24*60*60];
NSLog(@"出力:%@", formatterDate); // 出力:2011-06-30 00:00:00 +0000