酢ろぐ!

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

iOSでAmazon S3からのレスポンスヘッダーの時間(Date)の文字列からNSDateを生成する(http-date to NSDate)

本記事は「HTTPレスポンスヘッダーの時間(Date)の文字列からNSDateを生成する - iOSアプリ開発の逆引き辞典」に転記しました。


久しぶりに普通にObjective-CでのTipsです*1

タイトルにはAmazon Simple Storage Service(Amazon S3)からの……と書いていますが、Amazon S3だけではなくHTTPサーバーからのレスポンスヘッダーから時刻を取り出す汎用的な処理です。レスポンスヘッダーの「Date」を見ると以下のようなフォーマットで、サーバーの現在時刻が格納されています。

Mon, 25 Oct 2010 09:49:00 GMT

この日付をフォーマットしてNSDate型に変換するコードは、以下の通りです。

- (NSDate*) getDate:(NSHTTPURLResponse*)response
{
    NSDictionary* headers = [response allHeaderFields];
    NSString* httpDateString = [headers valueForKey:@"Date"];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
	[dateFormatter setTimeStyle:NSDateFormatterFullStyle];
	[dateFormatter setDateFormat:@"EEE',' dd' 'MMM' 'yyyy HH':'mm':'ss zzz"];
	[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
	[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"JST"]];
	[dateFormatter setCalendar:[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]];
    
	NSDate* nsDate = [dateFormatter dateFromString:httpDateString];
    [dateFormatter release], dateFormatter = nil;
	
	return nsDate;
}

*1:かなり久しぶり?