iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

HTTPレスポンスヘッダーの時間(Date)の文字列からNSDateを生成する

NSDate dateで現在時刻を取得することができますが、HTTPサーバーから返ってくる時間を使って処理をおこなう方法をご紹介します。

ここでは、Amazon Simple Storage Service(Amazon S3)から返ってきたHTTPレスポンスヘッダーの時刻を取り出す汎用的な処理ですが、一般的な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;
}