本記事は「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:かなり久しぶり?