Какую строку формата использовать для миллисекунд в строках даты на iPhone?

100

Мне нужно анализировать строки в формате, который включает миллисекунды. Какую строку формата я использую, чтобы получить правильное значение даты?

Например, предположим, что у меня есть строка со следующим значением: «2011-06-23T13: 13: 00.000»

Какую строку формата передать в NSDateFormatter в следующем коде?

NSString *dateValue = @"2011-06-23T13:13:00.000";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSString *formatString = @"yyyy-MM-dd'T'HH:mm:ss.???";
[formatter setDateFormat:formatString];
NSDate *date = [formatter dateFromString:dateValue];

Что я использую вместо ??? в коде выше?

Ageektrapped
источник

Ответы:

211

Это в SSSсоответствии со спецификацией языка разметки данных локали Unicode .

"yyyy-MM-dd'T'HH:mm:ss.SSS"

В более общем плане используйте любое количество символов S в верхнем регистре, чтобы получить такое количество десятичных знаков в компоненте долей секунды. (Так, например, ss.Sбудет отображаться время с точностью до десятых долей секунды.)

Саймон Уитакер
источник
2
Мне было интересно, знаете ли вы, как я могу сделать мягкий разбор миллисекунд? Дата может иметь 6, 7 или даже отсутствие миллисекунды. Я мог бы использовать регулярные выражения, но мне было интересно, можно ли это сделать из коробки с правильной строкой формата.
Cyupa 03
Таким образом, максимальное количество S равно трем, например SSS. Если вы добавите больше, вы просто получите нули, например, для timeIntervalSince1970 из 1415986217.544384 и .SSSSSS вы получите .544000, так что не лучшее решение.
Malhal
@Cyupa Миллисекунда - это всего лишь 1/1000 секунды. 6 знаков после запятой - это микросекунды, а 1 десятичный знак - десятичные. - Использовать миллисекунды для любого числа десятичных знаков так же неправильно, как использовать буквально для чего-то в переносном смысле; вы все еще можете это сделать, но это меняет значение слова.
Liggliluff
4

Вам нужно передать такое же количество S в конце, например, My Date была '2015-11-17T03: 36: 45.041503Z', я использовал 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' форматировщик, я имею в виду, что число 'S' равно 6 как 6-значная дата.

Пракаш Радж
источник
Что будет отформатировано, чтобы получить наносекунды в микросекундах вместо миллисекунд. Я пробовал использовать «yyyy-MM-dd'T'HH: mm: ss.SSSSSSz» и «yyyy-MM-dd'T'HH: mm: ss.SSSSSSSSSz», и это не работает.
IndexOutOfDevelopersException
-1

использовать SSSдля трех десятичных знаков секунды

"yyyy-MM-dd'T'HH:mm:ss.SSS"
гарриоверы
источник
Это не удается. Я не получаю дату назад.
ageektrapped