Cocoa / iPhone: форматирование даты

Простой пример для тех, кто ищет простой и быстрый путь отформатировать дату при разработке под iPhone. В моем примере будем форматировать дату по стандарту RFC2822.

NSString *rfcDate = @"Mon, 4 Jan 2010 20:41:12 +0300";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

/* Установка локали обязательна, т.к. иначе будет использована текущая */
NSLocale *enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatter setLocale:enUS];
[enUS release];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSDate *theDate = [formatter dateWithString:rfcDate];

Данный подход достаточно прост и эффективен, но у него есть один минус - куча строк, которые придется писать каждый раз, когда надо сделать преобразование. Чтобы этого избежать можно сделать так:

NSDate-RFC2822.h:

#import <Foundation/Foundation.h>

@interface NSDate (RFC2822)
    + (NSDate)dateFromRFC2822:(NSString *)rfc2822;
@end

NSDate-RFC2822.m:

#import "NSDate-RFC2822.h"

@implementation NSDate (RFC2822)

+ (NSDateFormatter*)rfc2822Formatter {
     static NSDateFormatter *formatter = nil;
     if (formatter == nil) {
         formatter = [[NSDateFormatter alloc] init];
         NSLocale *enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
         [formatter setLocale:enUS];
         [enUS release];
         [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
     }
     return formatter;
 }

 + (NSDate*)dateFromRFC2822:(NSString *)rfc2822 {
      NSDateFormatter *formatter = [NSDate rfc2822Formatter];
      return [formatter dateFromString:rfc2822];
 }

 @end

И теперь, чтобы конвертировать дату, нужно лишь:

#import "NSDate-RFC2822.h"
...
NSDate *theDate = [NSDate dateFromRFC2822:rfc2822String];

Отправить комментарий

Image CAPTCHA
Enter the characters shown in the image.
Реклама на stremoukhov.ru: