Який рядок формату я використовую протягом мілісекунд у рядках дат на 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

Таким чином, максимальна кількість S становить три, наприклад, SSS. Якщо ви додасте більше, ви просто отримаєте нулі, наприклад, для timeIntervalSince1970 1415986217.544384 та .SSSSSS, ви отримаєте .544000, тож не чудове рішення.
маль

@Cyupa Мілісекунда - це лише 1/1000 секунди. 6 десяткових знаків - це мікросекунди, а 1 десяткове місце - десяткові секунди. - Використовувати мілісекунди для будь-якої кількості десяткових знаків так само неправильно, як використовувати буквально для чогось образного; ви все ще можете це зробити, але це змінює значення цього слова.
Liggliluff


4

Вам потрібно пропустити ту саму кількість 'S' наприкінці, наприклад, Моя дата була '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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.