Преобразование ISO 8601 в NSDate
У меня есть timestamp, исходящая от сервера, которая выглядит так:
2013-04-18T08:49:58.157+0000
Я попытался удалить двоеточие, я пробовал все это:
Преобразование метки времени ISO 8601 в NSDate: как вы работаете с временным смещением UTC?
- Как рассчитать временной интервал в Java и форматировать вывод?
- JPanel Padding в Java
- Как изменить цвет фона ячейки в пользовательском форматировании jqgrid?
- Добавление начальных нhive с использованием R
- Используйте пользовательский разделитель тысяч в C #
Почему NSDateFormatter не может анализировать дату из формата ISO 8601
Вот где я нахожусь:
+ (NSDate *)dateUsingStringFromAPI:(NSString *)dateString { NSDateFormatter *dateFormatter; dateFormatter = [[NSDateFormatter alloc] init]; //@"yyyy-MM-dd'T'HH:mm:ss'Z'" - doesn't work //@"yyyy-MM-dd'T'HH:mm:ssZZZ" - doesn't work //@"yyyy-MM-dd'T'HH:mm:sss" - doesn't work [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; // NSDateFormatter does not like ISO 8601 so strip the milliseconds and timezone dateString = [dateString substringWithRange:NSMakeRange(0, [dateString length]-5)]; return [dateFormatter dateFromString:dateString]; }
Один из моих самых больших вопросов – это формат даты, который у меня выше ISO 8601? Все примеры, которые я видел от людей, форматы каждого из них несколько отличаются. У некоторых есть ...157-0000
, у других нет ничего в конце.
- Как читать числа с запятой в виде десятичного разделителя?
- экспортировать кадры данных в Excel через xlsx с условным форматированием
- Форматирование десятичных знаков в R
- Как отформатировать TimeSpan в XAML
- Поставщик формата размера файла
- Как отключить научную нотацию?
- Новая линия в JLabel
- Формат A TimeSpan с годами
Это работает для меня:
NSString *dateString = @"2013-04-18T08:49:58.157+0000"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; // Always use this locale when parsing fixed format date strings NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; [formatter setLocale:posix]; NSDate *date = [formatter dateFromString:dateString]; NSLog(@"date = %@", date);
Новый API от Apple! NSISO8601DateFormatter
NSString *dateSTR = @"2005-06-27T21:00:00Z"; NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; NSDate *date = [formatter dateFromString:dateSTR]; NSLog(@"%@", date);
У меня также есть собственный API, который является более чистым … Это реализация, которую я получил в моем classе DateTimeManager:
+ (NSDate *)getDateFromISO8601:(NSString *)strDate{ NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; NSDate *date = [formatter dateFromString: strDate]; return date; }
Просто скопируйте и вставьте метод, это сделает трюк. Наслаждайся этим!