読者です 読者をやめる 読者になる 読者になる

キノコの自省録

テクノロジーとコンテンツの融合を目指して

CookieのexpiresをNSDateFormatterで解析する

サーバから貰ったセッションは、
NSURLConnectionを使っていれば、基本的にCookieヘッダを勝手につけてくれるので、
細かいハンドリングをする必要はありませんが、
自動ログインを実装する場合などで、有効期限を知りたくなる時があります。
有効期限は、Set-Cookieヘッダのexpiresパラメタに指定されますが、
この形式が割と特殊で、NSDateFormatterを使ってパースしようとすると、
どうやってフォーマット文字列を組めばいいのか悩んでしまうと思います。


ということで、NSDateFormatterを使ってパースするサンプルを書いておきます。



NSString* sampleExpires = @"Tue, 1-Jan-2013 12:24:34 GMT";
NSDateFormatter* formatter = [ [NSDateFormatter alloc] init];
formatter.locale = [ [ [NSLocale alloc] initWithLocaleIdentifier:@"en-US"] autorelease];
formatter.dateFormat = @"EEE, dd'-'MMM'-'yyyy HH':'mm':'ss Z";
NSDate* expireDate = [formatter dateFromString sampleExpires];
[formatter release];


expireDateが、sampleExpiresを解析したNSDateオブジェクトです。
ポイントは主に2つ。

  1. dateFormat文字列のコロン(:)とハイフン(−)は、引用符(’)で括ること
  2. 必ずロケールを設定すること。Cookieのexpiresなら、大抵はen-US。


取得したexpireDateから、timeIntervalFromNowなどであんなことやこんなことをすれば良いと思います。