103 votes

Quelle chaîne de format dois-je utiliser pour les millisecondes dans les chaînes de dates sur l'iPhone ?

Je dois analyser des chaînes de caractères 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 je dispose d'une chaîne de caractères 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 ?

216voto

Simon Whitaker Points 11881

C'est SSS , selon la Unicode Locale Data Markup Language spec (langage de balisage des données locales) .

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

Plus généralement, utilisez n'importe quel nombre de caractères S majuscules pour obtenir ce nombre de décimales dans la composante "fraction de seconde". (Donc ss.S indique l'heure au dixième de seconde près, par exemple).

2 votes

Je me demandais si vous saviez comment je pouvais faire une analyse plus souple 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 dès le départ avec une chaîne de format appropriée.

1 votes

De cette manière, le nombre maximum de S est de trois, par exemple SSS. Si vous en ajoutez d'autres, vous obtiendrez des zéros, par exemple pour le timeIntervalSince1970 de 1415986217.544384 et .SSSSSS, vous obtiendrez .544000, ce qui n'est pas une bonne solution.

0 votes

@Cyupa Une milliseconde n'est qu'un millième de seconde. 6 décimales correspondent à des microsecondes, et 1 décimale à des décisecondes. - Utiliser millisecondes pour n'importe quel nombre de décimales est aussi faux que d'utiliser littéralement pour quelque chose de figuré ; vous pouvez toujours le faire, mais c'est changer le sens du mot.

7voto

Caleb Points 72897

Les Guide des modèles de format de date suggère que "S" est le spécificateur de format pour les fractions de secondes.

5voto

Prakash Raj Points 121

Vous devez indiquer le même nombre de "S" à la fin, par exemple Ma date était '2015-11-17T03:36:45.041503Z' le i utilisé yyyy-MM-dd'T'HH:mm:ss.SSSSSSz'. formateur, je veux dire que le nombre de "S" est de 6 car il s'agit d'une date à 6 chiffres.

-1voto

harryovers Points 1655

Utiliser SSS pour trois décimales de seconde

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

0 votes

C'est un échec. Je n'obtiens aucune date en retour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X