Существует ли простой способ преобразовать метку времени ISO8601 в отформатированный NSDate?

Если я использую следующий код:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
NSDate *myDate = [dateFormatter dateFromString:@"2010-01-28T15:22:23.863"];
NSLog(@"%@", [dateFormatter stringFromDate:myDate]);

Это успешно преобразовывается в a Date объект, однако, я, может казаться, не форматирую его никакой другой путь, чем yyyy-MM-dd'T'HH:mm, т.е. то, что зарегистрировано, 2010-01-28T15:22:23

Если я изменяю dateFormat для высказывания [dateFormatter setDateFormat:@"yyyy-MMMM-d'T'HH:mm"]; объект Даты является несуществующим...

Таким образом, мой окончательный вопрос состоит в том, как отформатировать метку времени ISO8601 от базы данных SQL для использования, например, NSDateFormatterMediumStyle возвратиться "1 января 2010"?

46
задан rson 4 February 2010 в 16:16
поделиться

3 ответа

Вам нужен другой форматер для обработки вывода. Поместите это после вашего кода:

NSDateFormatter *anotherDateFormatter = [[NSDateFormatter alloc] init];   
[anotherDateFormatter setDateStyle:NSDateFormatterLongStyle];
[anotherDateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"%@", [anotherDateFormatter stringFromDate:myDate]);
19
ответ дан 26 November 2019 в 20:15
поделиться

Я должен отметить, что в прошлый раз, когда я проверял методы Apples NSDate , не поддерживали ISO8601. У меня все еще есть ошибка Apple, касающаяся предоставления официальной поддержки.

+ (id) dateWithNaturalLanguageString: (NSString *) string

будет правильно (в прошлый раз, когда я ее запускал) проанализировать и создать NSDate объект из строки ISO801, хотя в документации говорится, что вы не должны его использовать, он работал со всеми датами ISO8601, которые я пробовал до сих пор.

5
ответ дан 26 November 2019 в 20:15
поделиться

У меня похожая, но немного более сложная проблема , и я нашел очень простое решение!

Проблема: Мои входящие даты ISO8601 выглядят так: 2006-06-14T11: 06: 00 + 02: 00 У них в конце есть смещение часового пояса.

Решение: Воспользуйтесь программой Питера Хози ISO8601DateFormatter , которую вы можете загрузить с здесь .

ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSDate *theDate = [formatter dateFromString:dateString];
[formatter release], formatter = nil;

и

ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSString *dateString = [formatter stringFromDate:[twitch dateTwitched]];
[formatter release], formatter = nil;
42
ответ дан 26 November 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: