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?

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.)


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


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.


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"

Das scheitert. Ich bekomme kein Datum zurück.
ageektrapped
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.