Какую строку формата использовать для миллисекунд в строках даты на 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];

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

Ответы:


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.