2010年12月14日火曜日

RSS2.0 の pubDate に入ってる日付を NSDate に変換したい。

Objective-C での変換のはなし。 Xcode 3.2.5 and iOS SDK 4.2.1 で試してる。
文字列の日付を NSDate に変換します。


こんな感じで。

NSString *stringPubDate = @"Tue, 30 Nov 2010 06:54:00 +0000";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZZ"];
NSDate *pubDate = [formatter dateFromString:stringPubDate];
[formatter release];

NSLog(@"%@", pubDate);



EEEを探すのに苦労した。
記号の一覧がまとまってるサイトを探してたけど、見つけられなかった。

EEEが見つかる前は仕方ない、こんな感じにしようと思った。

NSString *stringPubDate = @"Tue, 30 Nov 2010 06:54:00 +0000";

NSArray *splitDate = [stringPubDate componentsSeparatedByString:@", "];

NSDictionary *weekDict = [NSDictionary dictionaryWithObjectsAndKeys:
@"月", @"Mon",
@"火", @"Tue",
@"水", @"Wed",
@"木", @"Thu",
@"金", @"Fri",
@"土", @"Sat",
@"日", @"Sun",nil];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd MMM yyyy HH:mm:ss ZZZZ"];
NSDate *pubDate = [formatter dateFromString:[splitDate objectAtIndex:1]];
[formatter release];

NSLog(@"%@ %@曜日", pubDate, [weekDict objectForKey:[splitDate objectAtIndex:0]]);


ついでなので、NSDate から文字列に変換してみる。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]];
[dateFormatter setDateFormat:@"yyyy年MM月dd日HH時mm分ss秒"];
NSString *stringPubDate = [dateFormatter stringFromDate:pubDate];
[dateFormatter release];

NSLog(@"pubDate [ %@ ] [ %@ ]", pubDate, stringPubDate);