NSString to NSDate не работает на iDevice - PullRequest
1 голос
/ 18 октября 2011

У меня проблема с преобразованием строки NSString в NSDate и обратно в форматированную строку NSString.Codenippet работает без проблем на симуляторе iOS, но не работает на моем iPhone 4.

NSString *pubDate = @"Tue, 18 Oct 2011 05:00:00 +0100";

NSDateFormatter *formater1 = [[NSDateFormatter alloc] init];
[formater1 setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];

NSDate *d = [formater1 dateFromString:pubDate];
NSLog(@"d: %@", d);


NSDateFormatter *formater2 = [[NSDateFormatter alloc] init];
[formater2 setDateFormat:@"dd MMM yyyy"];

NSString *k = [formater2 stringFromDate:d]; 
NSLog(@"k: %@", k);

[formater1 release];
[formater2 release];

Вывод симулятора:

d: 2011-10-18 04:00:00 +0000
k: 18 Oct 2011

Вывод на устройство:

d: (null)
k: (null)

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

Вам нужно установить языковой стандарт для форматеров даты.

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

//...
formater1.locale = locale;

//...
formater2.locale = locale;

//...
[locale release];

Если вы не установите языковой стандарт, пользовательские настройки могут изменить предоставленную строку в соответствии с настройками пользователя, например, изменить время с 12 часов на 24 часа или наоборот.

0 голосов
/ 18 октября 2011

Это может быть связано с тем, что устройство не настроено на английский язык, поэтому оно не может выполнить синтаксический анализ Tue и Oct в pubDat.

.*:

[formater1 setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"EN"] autorelease]];
...