NSDateFormatter возвращая ноль в ОС 4.0

У меня был следующий код, продолжающий работать на ОС 3.x

NSString *stringDate = @"2010-06-21T20:06:36+00:00";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate *theDate = [dateFormatter dateFromString:stringDate];
NSLog(@"%@",[dateFormatter stringFromDate:theDate]);

но теперь в новейшем XCode 3.2.3 под iOS4 средством моделирования, varialble theDate является нолем.

Я просмотрел ссылку класса и не вижу ничего удержанного от использования или реализованного по-другому для iOS4 с этими определенными методами. Что я не учитывал?

26
задан kennytm 21 August 2010 в 11:38
поделиться

10 ответов

На вашем устройстве установлено 24-часовое или 12-часовое время?

Это звучит как безумный вопрос, но я только что столкнулся с этой ошибкой - форматтер даты настроит вашу строку формата в соответствии с текущим языковым стандартом, который будет включать настройки формата времени.

Вы можете заставить его игнорировать их, добавив эту строку:

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

Надеюсь, что это поможет.

8
ответ дан 28 November 2019 в 06:42
поделиться

Мне нравится.

Правильно ли он работает на реальном устройстве?

Если да, отправьте отчет об ошибке для симулятора, в противном случае отправьте отчет об ошибке для iOS 4.

0
ответ дан 28 November 2019 в 06:42
поделиться

Я только что отлаживал ту же самую проблему. У меня та же строка даты, что и у вас, которая работает в 3.x, а не в 4.0. Те же симптомы.

Просматривая документацию NSDateFormatter, я вижу:

Инициализация средства форматирования даты - init Доступно в iPhone OS 2.0 через iPhone OS 3.2

Это говорит о том, что метод init устарел для iOS 4.0. Я не совсем понимаю, что это значит.

0
ответ дан 28 November 2019 в 06:42
поделиться

Я получаю значение из dataFormat @ "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '+' hh: mm" ;

1
ответ дан 28 November 2019 в 06:42
поделиться

Недавно я столкнулся с этой проблемой. В итоге я использовал синтаксический анализатор ISO8601 Питера Хози. Он доступен здесь: http://boredzo.org/iso8601unparser/

2
ответ дан 28 November 2019 в 06:42
поделиться

Ссылка, которую разместил Элфред, помогла. Я столкнулся с той же проблемой во время конвертации моего приложения с 3.1.3 на iOS4. По ссылке находится класс ISO8601DateFormatter, который является более совершенным расширением, чем мой собственный класс утилиты даты.

Elfred пишет: Недавно я столкнулся с этой проблемой. В итоге я использовал парсер ISO8601 от Питера Хоси. Его можно найти здесь: http://boredzo.org/iso8601unparser/

0
ответ дан 28 November 2019 в 06:42
поделиться

Предоставляемый мне формат находится на полпути между RFC 822 и GMT. если я изменю «+00: 00» на «+0000», я могу использовать «Z» в моем формате. и если я изменю его на «GMT + 00: 00», я могу использовать ZZZZ для правильного получения данных. Кажется, что-то было вырезано, чтобы справиться с этим гибридом, поскольку он работал у меня раньше с OS 3.x.

1
ответ дан 28 November 2019 в 06:42
поделиться

Похоже, NSDateFormatter стал очень разборчивым.

-(void)dateFormatterTests {
    NSDateFormatter *formatter;

    formatter = [[NSDateFormatter alloc] init];

#ifdef WORKS
    [formatter setDateFormat:@"yyyy-MM-dd"];
#elif defined(ALSO_WORKS)
    [formatter setDateFormat:@"yyyy MM dd"];
    [formatter setLenient:YES];
#else // DOESN'T WORK
    [formatter setDateFormat:@"yyyy MM dd"];
#endif

    // Works per comments above
    NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13"]);  
    // Never works with any of the above formats
    NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13 22:00"]); 

    [formatter release]; formatter = nil;
}
0
ответ дан 28 November 2019 в 06:42
поделиться

У меня была такая же проблема в моих приложениях Нулевое значение из NSDateFormatter .

Моя проблема заключалась в следующем:

Я отправлял своему приложению дату и время вроде этого: 16.07.2010 04:21:00 +00: 00 с помощью средства форматирования вот так: [dateFormatter setDateFormat: @ "MM / dd / yyyy HH: mm: ss ZZZ"]

Похоже, что часть форматирования ZZZ НЕ ДОЛЖНА принимает двоеточие: in время.

Работает: 16.07.2010 04:21:00 +0000

Не работает: 16.07.2010 04:21:00 +00: 00

В службу поддержки текущие вышедшие приложения, все, что я сделал, это поискал часть +00: 00 в строке и заменил ее на +0000 .

Надеюсь, это поможет другим.

0
ответ дан 28 November 2019 в 06:42
поделиться

Этот код удалит лишнее двоеточие, как описывает AtomRiot:

Преобразование из:

  • NSString * stringDate = @ "2010-06-21T20: 06: 36 + 00: 00 ";

to:

  • NSString * stringDate = @" 2010-06-21T20: 06: 36 + 0000 ";
// Remove colon in timezone as iOS 4+ NSDateFormatter breaks
if (stringDate.length > 20) {
    stringDate = [stringDate stringByReplacingOccurrencesOfString:@":"
                                                       withString:@""
                                                          options:0
                                                            range:NSMakeRange(20, stringDate.length-20)];
}

подробнее см .: https: // devforums .apple.com / thread / 45837

5
ответ дан 28 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: