Как изменить NSDateFormatter для строки

У меня есть строка, в которой есть поле даты. Я храню поле как NSString в своей базе данных, например, 2011-12-07 21:15:00 +0000.

Я использую следующий код, чтобы получить дату из строки в формате даты, например:

NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss.S"];

Мне нужен вышеуказанный формат даты в формате времени как чч, но он всегда дает ноль. Мой код:

    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss.S"];

    NSDateFormatter *timeFormat = [[[NSDateFormatter alloc] init] autorelease];
    [timeFormat setDateFormat:@"hh a"];

    [dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease] ];
    NSDate *date1 = [dateFormat dateFromString:startSection];

    NSLog(@"Date 1 : %@", date1);


    [timeFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease] ];
    NSDate *time1 = [timeFormat dateFromString:startSection];
    NSString *strSection2 = [NSString stringWithFormat:@"%@", time1];
    NSLog(@"Time 1 : %@", strSection2); /// always null at this place.

Я не уверен, что я делаю неправильно здесь. Может ли кто-нибудь помочь мне здесь?


person lifemoveson    schedule 14.10.2011    source источник
comment
Привет! Вы пробовали то, что я предложил? Работает ли это для вас?   -  person Phlibbo    schedule 14.10.2011
comment
Привет Phlibbo. Спасибо за вашу помощь. Но мой больше, чем просто смотреть в дату. Мне нужно отсортировать строку, для которой я должен написать код.   -  person lifemoveson    schedule 15.10.2011
comment
Извините, но я не понял ни слова из вашего последнего комментария :/   -  person Phlibbo    schedule 15.10.2011
comment
Итак, чтобы понять это прямо: вы читаете строку, которая должна быть в формате @гггг-мм-дд ЧЧ:мм:сс.С. Это не сработало для вас, я сказал вам, почему. Тогда вы хотите сохранить эту дату в другом формате? (хх а)? Если это не так, вы можете предоставить нам дополнительную информацию в своем вопросе.   -  person Phlibbo    schedule 15.10.2011


Ответы (2)


Покажите вывод при запуске этого кода, который будет полезен. Но если бы мне пришлось догадываться, что вы делаете что-то не так в части формата времени. Я бы посоветовал вам получить дату из строки базы данных, используя средство форматирования даты, которое у вас есть, и в этот момент в коде: (что, как я предполагаю, работает)

[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease] ];
NSDate *date1 = [dateFormat dateFromString:startSection];

NSLog(@"Date 1 : %@", date1);

Переключите передачу после приведенного выше кода и сделайте это вместо того, чтобы получить свое время в строке в желаемом формате:

[timeFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease] ];
NSString * time = [timeFormat stringWithDate:date1];
NSLog(@"Time 1 : %@", time);
person EricLeaf    schedule 14.10.2011
comment
Я уверен, что смогу это сделать и получить значение timeFormat в NSString. Но меня беспокоит то, что когда я сортирую дату в nsstring, это дает неверный результат. Поэтому я хотел изменить его на NSDate, чтобы сортировка дат была правильной. - person lifemoveson; 14.10.2011
comment
Либо отсортируйте обработанную строку, как я создал выше, либо настройте свою сортировку специально для того, что вы хотите отсортировать с помощью NSDate. Дата - это дата, то, что вы форматируете, не имеет значения для NSDate. Я не могу догадаться, что вы имеете в виду под сортировкой, но в отношении дат я думаю, что восходящие и нисходящие будут единственными значимыми методами, и для этого вам не нужно выполнять какое-либо форматирование. Если вы хотите сортировать только по часам, используйте строку после форматирования. - person EricLeaf; 14.10.2011
comment
Я использовал только час как строку, а затем добавил массив и обнаружил, что он не сортируется правильно, поскольку он сортируется при выполнении запроса. Я получаю следующий вывод: Массив: {10:00, 11:00, 8:00} Как изменить следующую сортировку массива? В настоящее время я использую sortedArrayUsingSelector:@selector(compare:). - person lifemoveson; 14.10.2011
comment
Ну, классическая проблема сортировки чисел все еще существует. Попробуйте перейти на 24-часовой формат, а затем просто возьмите час и превратите его в целое число. (т. е. вы, вероятно, не хотите возиться с сортировкой чисел и тегом AM / PM, просто конвертируйте в 24-часовой формат, это упрощает) - person EricLeaf; 15.10.2011
comment
На самом деле моя проблема немного больше. Я пытаюсь создать разделы через массив дат, вставляя значения в качестве ключей в NSDictionary и соответствующие связанные значения. Когда я запускаю запрос, я получаю сортировку дат, но когда я добавляю в словарь, он каким-то образом становится несортированным. - person lifemoveson; 15.10.2011

Ваша дата идет 2011-12-07 21:15:00 +0000, а ваша formatString идет @"yyyy-MM-dd HH:mm:ss.S". Проблема здесь в ss.S. Сделайте @"yyyy-MM-dd HH:mm:ss +S" и все заработает.

Что касается формата времени, я не уверен, что вы делаете. Очевидно, вы передаете ему ту же строку (startSection), которая даже близко не похожа на hh a.

Обновление: О, и, если я не ошибаюсь, форматирование соответствует эти соглашения означают, что вы, вероятно, ищете Z, а не S.

person Phlibbo    schedule 14.10.2011