#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.