Простой пример для тех, кто ищет простой и быстрый путь отформатировать дату при разработке под 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];
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
@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
@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];
...
NSDate *theDate = [NSDate dateFromRFC2822:rfc2822String];

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