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

#iphone #objective-c #nsdate #nsdateformatter

#iPhone #objective-c #nsdate #nsdateformatter

Вопрос:

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

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

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

Я хочу, чтобы указанный выше формат даты в формате времени был как hh a, но он всегда дает null.
Мой код :

     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.
  

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

Комментарии:

1. Привет! Вы попробовали то, что я предложил? Это работает для вас?

2. Привет, Филибо. Спасибо за вашу помощь. Но мой — это больше, чем просто просмотр даты. Мне нужно отсортировать строку, для которой я должен написать код.

3. Извините, но я не понял ни слова из вашего последнего комментария :/

4. Итак, чтобы разобраться: вы читаете строку, которая должна быть в формате @»гггг-ММ-дд ЧЧ: мм: ss.S». У вас это не сработало, я сказал вам, почему. Затем вы хотите сохранить эту дату в другом формате? (hh a)? Если это неверно, вы можете предоставить нам дополнительную информацию в своем вопросе.

Ответ №1:

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

 [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);
  

Комментарии:

1. Я уверен, что смогу это сделать и получить значение timeFormat в NSString. Но меня беспокоит то, что когда я выполняю сортировку по дате в nsstring, это дает неверный вывод. Поэтому я хотел изменить его на NSDate таким образом, чтобы сортировка дат была правильной.

2. Либо выполните сортировку по обработанной строке, как я создал выше, либо настройте свою сортировку специально для того, что вы хотите отсортировать с помощью NSDate. Дата — это дата, то, что вы форматируете, не имеет значения для NSDate. Я не могу догадаться, что вы имеете в виду под сортировкой, но в отношении дат я бы подумал, что возрастание и убывание будут единственными значимыми методами, и для этого вам не нужно выполнять какое-либо из этих форматирований. Если вы хотите сортировать только по часу, используйте строку после форматирования.

3. Я использовал только час в качестве строки, а затем добавил в массив и обнаружил, что он не сортируется правильно, поскольку он сортируется во время выполнения запроса. Я получаю следующий вывод: Массив: {10 УТРА, 11 утра, 8 утра} Как изменить следующую сортировку массива? В настоящее время я использую sortedArrayUsingSelector:@selector (сравните:).

4. Ну, классическая проблема сортировки чисел все еще существует. Попробуйте перейти к 24-часовым часам, а затем просто возьмите час и превратите его в целое число. (т. Е. Вы, вероятно, не хотите возиться с сортировкой чисел и тегом AM / PM, просто преобразуйте в 24-часовые часы, это упрощает)

5. На самом деле моя проблема немного больше. Я пытаюсь создать разделы через массив дат, вставив значения в качестве ключей в NSDictionary и соответствующие связанные значения. Когда я запускаю запрос, я получаю отсортированные даты, но когда я добавляю в словарь, он каким-то образом не сортируется.

Ответ №2:

Ваша дата идет 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.