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; }