Подтвердить что ты не робот

Преобразование формата даты в объекте 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];
4b9b3361

Ответ 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 - медленная собака.