Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to properly convert the Last-Modified header from an HTTP response to an NSDate on iOS

I am looking for a fully working solution, one that works with:

  • any iOS locale or timezone
  • any/most HTTP servers
  • Xcode 4.0.2 (see why)

Current broken code:

 NSString lastModifiedString = @"Mon, 06 Jun 2011 12:47:05 GMT";
 NSDateFormatter *df = [[NSDateFormatter alloc] init];  
 //df.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";
 df.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z";
 df.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];  
 df.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];  
 NSDate date = [df dateFromString:lastModifiedString];  

I assumed that Last-Modified is supposed to use the same format like other date fields in HTTP spec, meaning to use RFC-1123 / RFC-822

Resources:

  • http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html HTTP 1.1
  • http://developer.apple.com/library/ios/#qa/qa1480/_index.html
like image 209
sorin Avatar asked Jun 06 '11 13:06

sorin


1 Answers

The only thing wrong is that you're missing asterisks in-between NSString and lastModifiedString, and also between NSDate and date. Once you put those in, this code works for me.

like image 200
Dave DeLong Avatar answered Sep 19 '22 17:09

Dave DeLong