Преобразование формата даты в цель C - PullRequest
30 голосов
/ 17 июля 2011

Как я могу преобразовать следующую дату "Вс 17 июля 07:48:34 +0000 2011" в следующем формате "2011-07-17 07:48:34"?

Я использовал NSDateFormatter, как показано ниже, но это не сработало. Это дает ноль в результате.

NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];

Ответы [ 2 ]

68 голосов
/ 17 июля 2011

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

Для анализа даты "Вс 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 голосов
/ 17 июля 2011

Если sDate - это ваша строка в формате «Sun Jul 17 07:48:34 +0000 2011», вы должны преобразовать ее в NSDate. Затем вы можете использовать второй NSDateFormatter для преобразования этой даты в желаемый формат "гггг-мм-дд чч: мм: сс".

Если вам нужно выяснить строку, необходимую для конвертации, у этого сайта есть отличная ссылка: 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"];

В качестве небольшого совета нестандартные даты, такие как "июль" (должны быть июля), могут создавать проблемы здесь. Быстрее просто преобразовать необходимые части в простой 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 - медленная собака.

...