Welche Formatzeichenfolge verwende ich für Millisekunden in Datumszeichenfolgen auf dem iPhone?

100

Ich muss Zeichenfolgen in einem Format analysieren, das Millisekunden enthält. Welche Formatzeichenfolge verwende ich, um den richtigen Datumswert zu erhalten?

Angenommen, ich habe eine Zeichenfolge mit dem folgenden Wert: "2011-06-23T13: 13: 00.000"

Welche Formatzeichenfolge übergebe ich im folgenden Code an meinen 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];

Was benutze ich anstelle von ??? im obigen Code?

ageektrapped
quelle

Antworten:

211

Es ist SSS, gemäß der Unicode - Locale Markup Language - Spezifikation .

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

Verwenden Sie im Allgemeinen eine beliebige Anzahl von S-Zeichen in Großbuchstaben, um so viele Dezimalstellen in der Sekundenbruchteilkomponente zu erhalten. (So ss.Swird beispielsweise die Zeit auf die nächste Zehntelsekunde genau angezeigt.)

Simon Whitaker
quelle
2
Ich habe mich gefragt, ob Sie wissen, wie ich die Millisekunden nachsichtig analysieren kann. Das Datum kann 6, 7 oder sogar keine Millisekunde haben. Ich könnte mit regulären Ausdrücken arbeiten, aber ich habe mich gefragt, ob dies mit einer geeigneten Formatzeichenfolge sofort möglich ist.
Cyupa
Auf diese Weise beträgt die maximale Anzahl von S drei, z. B. SSS. Wenn Sie mehr hinzufügen, erhalten Sie nur Nullen, z. B. für timeIntervalSince1970 von 1415986217.544384 und .SSSSSS. Sie erhalten .544000, also keine großartige Lösung.
Malhal
@Cyupa Eine Millisekunde ist nur 1/1000 Sekunde. 6 Dezimalstellen sind Mikrosekunden und 1 Dezimalstelle sind Dezisekunden. - Die Verwendung von Millisekunden für eine beliebige Anzahl von Dezimalstellen ist ebenso falsch wie die wörtliche Verwendung für etwas im übertragenen Sinne. Sie können es immer noch tun, aber das ändert die Bedeutung des Wortes.
Liggliluff
7

Das Handbuch Datumsformatmuster schlägt vor, dass "S" der Formatbezeichner für Sekundenbruchteile ist.

Caleb
quelle
4

Sie müssen am Ende die gleiche Anzahl von 'S' übergeben. Beispiel: Mein Datum war '2015-11-17T03: 36: 45.041503Z'. Ich habe 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' verwendet. Formatierer, ich meine, sehen Sie, dass die Nummer von 'S' 6 als 6-stellige Datumsangabe ist.

Prakash Raj
quelle
Was würde formatiert werden, um Nanosekunden in Mikrosekunden anstelle von Millisekunden zu erhalten? Ich habe es mit 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' und 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSSSSz' versucht und es funktioniert nicht.
IndexOutOfDevelopersException
-1

Verwenden Sie SSSfür drei Dezimalstellen einer Sekunde

"yyyy-MM-dd'T'HH:mm:ss.SSS"
Harryovers
quelle
Das scheitert. Ich bekomme kein Datum zurück.
ageektrapped