文字列(NSString)型から日付(NSDate)型へ変換します。
ここでは「2011-06-28 21:23:45」という文字列をNSDateFormatterクラス
を使ってNSDate型へ変換します。
// フォーマットされる日付文字列 NSString *dateString = @"2011-06-28 21:23:45"; // フォーマット文字列を設定 NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // 文字列をNSDateに変換する NSDate *formatterDate = [fmt dateFromString:dateString]; NSLog(@"出力:%@", formatterDate);
上記のコードを実行すると、下記のような出力を得ることができます。
出力:2011-06-28 12:23:45 +0000
NSDateFormatterクラスが解釈できない文字列を無視する
文字列からNSDate型へフォーマットする時に不要な文字列が含まれている場合は、アポストロフィー(')
で不要な文字を挟む事でNSDateFormatterクラス
に無視させる事が可能です。
Store KitのVerifyReceipt(レシート有効性確認)をおこなうとJSONデータが返ってくるのですが、そのうちの購入日(purchase_date)のフォーマットが2011-05-23 18:23:45 Etc/GMT
となっています。
前述した方法でNSDateFormatterクラスを使って変換しましたが、残念ながら返っていた値はnil
でした。
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"ja"] autorelease]]; NSDate* date = [dateFormatter dateFromString:@"2011-05-23 02:30:01 Etc/GMT"]; NSLog(@"date: %@", date); // 出力:(null)
Etc/
の部分がNSDateFormatterクラス
では解釈することができず、NSDateへの変換に失敗することがわかりました。フォーマッターに無視して欲しい範囲をアポストロフィー
で囲ってしまいます。
アポストロフィー(' ')で括られた範囲が、NSDateFormatterクラスの変換時に無視されます。以下のサンプルコードでいうところの「'Etc/'ZZZ」の部分です。
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss 'Etc/'ZZZ"]; [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"ja"] autorelease]]; NSDate* date = [dateFormatter dateFromString:@"2011-05-23 02:30:01 Etc/GMT"]; NSLog(@"date: %@", date);
上記のコードを実行すると、下記のような出力を得ることができます。
出力:2011-05-23 02:30:01 +0000
正しくフォーマットできていることが確認できます。