Преобразование формата даты в объекте C
Как я могу конвертировать следующую дату "Sun Jul 17 07:48:34 +0000 2011"
в следующем формате "2011-07-17 07:48:34"?
Я использовал NSDateFormatter
, как показано ниже, но он не работал. В результате он дает null.
NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];
Ответы
Ответ 1
У вас неправильный формат даты для стиля даты, в которую вы проходите. Вот документ, объясняющий разные модификаторы: Форматы формата даты
Чтобы проанализировать дату "Вс июль 17 07:48:34 +0000 2011", вам понадобится формат, например:
[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
Чтобы получить его в следующем формате: "2011-07-17 07:48:34", вот полный код:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
NSDate *date = [dateFormatter dateFromString:sDate];
// Convert to new Date Format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date];
Ответ 2
Если sDate - это ваша строка, которая в формате "Sun Jul 17 07:48:34 +0000 2011", вы должны преобразовать ее в NSDate. Затем вы можете использовать второй NSDateFormatter, чтобы преобразовать эту дату в желаемый формат "yyyy-MM-dd HH: mm: ss".
Если вам нужно выяснить строку, необходимую для преобразования, этот сайт имеет отличную ссылку:
http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
например. "Вс июль 17 07:48:34 +0000 2011" можно проанализировать с помощью
[dateFormatter setDateFormat:@"EEE MMM d HH:mm:ss ZZZ yyyy"];
Как немного советов, нестандартные даты, такие как "Jul" (должен быть июль), могут создавать проблемы здесь. Это быстрее, чтобы просто преобразовать нужные части в plain C, с strftime().
См. Ссылку: http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst263.htm
Затем вы можете преобразовать временную метку unix в NSDate с помощью
[NSDate dateWithTimeIntervalSince1970:]
Использование C для синтаксического анализа даты/времени, как правило, до 10 раз быстрее. NSDateFormatter - медленная собака.