Quelle chaîne de format dois-je utiliser pendant des millisecondes dans les chaînes de date sur iPhone?

100

Je suis obligé d'analyser les chaînes dans un format qui inclut les millisecondes. Quelle chaîne de format dois-je utiliser pour obtenir la bonne valeur de date?

Par exemple, supposons que j'ai une chaîne avec la valeur suivante: "2011-06-23T13: 13: 00.000"

Quelle chaîne de format dois-je transmettre à mon NSDateFormatter dans le code suivant?

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];

Que dois-je utiliser à la place de ??? dans le code ci-dessus?

ageek piégé
la source

Réponses:

211

C'est SSS, conformément à la spécification Unicode Locale Data Markup Language .

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

Plus généralement, utilisez n'importe quel nombre de caractères S majuscules pour obtenir autant de décimales dans le composant des fractions de seconde. (Ainsi ss.Saffichera l'heure au dixième de seconde près, par exemple.)

Simon Whitaker
la source
2
Je me demandais si vous savez comment je peux faire une analyse indulgente des millisecondes? La date peut avoir 6, 7 ou même aucune milliseconde. Je pourrais utiliser des expressions régulières, mais je me demandais si cela pouvait être fait directement avec une chaîne de format appropriée.
Cyupa
De cette façon, le nombre maximum de S est de trois, par exemple SSS. Si vous ajoutez plus, vous obtenez juste des zéros, par exemple pour timeIntervalSince1970 de 1415986217.544384 et .SSSSSS, vous obtenez .544000 donc pas une bonne solution.
malhal
@Cyupa Une milliseconde n'est que 1/1000 de seconde. 6 décimales correspondent à des microsecondes et 1 décimale correspond à des décisecondes. - Utiliser des millisecondes pour un nombre quelconque de décimales est aussi faux que d'utiliser littéralement pour quelque chose au sens figuré; vous pouvez toujours le faire, mais cela change le sens du mot.
Liggliluff
4

Vous devez passer le même nombre de «S» à la fin, par exemple Ma date était «2015-11-17T03: 36: 45.041503Z» et j'ai utilisé «aaaa-MM-jj» T «HH: mm: ss.SSSSSSz» formateur, je veux dire voir le nombre de «S» est de 6 comme date d'entrée à 6 chiffres.

Prakash Raj
la source
Qu'est-ce qui serait formaté pour obtenir des nanosecondes en microsecondes au lieu de millisecondes. J'ai essayé avec 'aaaa-MM-jj'T'HH: mm: ss.SSSSSSz' et 'aaaa-MM-jj'T'HH: mm: ss.SSSSSSSSSz' et cela ne fonctionne pas.
IndexOutOfDevelopersException
-1

utiliser SSSpour trois décimales de seconde

"yyyy-MM-dd'T'HH:mm:ss.SSS"
harryovers
la source
Cela échoue. Je n'ai pas de date.
ageektrapped le