Quale stringa di formato utilizzo per i millisecondi nelle stringhe di data su iPhone?


100

Mi viene richiesto di analizzare le stringhe in un formato che includa i millisecondi. Quale stringa di formato utilizzo per ottenere il valore di data corretto?

Ad esempio, supponiamo di avere una stringa con il seguente valore: "2011-06-23T13: 13: 00.000"

Quale stringa di formato passo al mio NSDateFormatter nel codice seguente?

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

Cosa uso al posto di ??? nel codice sopra?

Risposte:


211

È SSS, secondo la specifica Unicode Locale Data Markup Language .

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

Più in generale, usa un numero qualsiasi di caratteri S maiuscoli per ottenere quel numero di cifre decimali nel componente frazioni di secondo. (Quindi ss.Smostrerà l'ora al decimo di secondo più vicino, ad esempio.)


2
Mi chiedevo se sai come posso fare un'analisi indulgente dei millisecondi? La data potrebbe avere 6, 7 o addirittura nessun millisecondo. Potrei andare con le espressioni regolari ma mi chiedevo se questo può essere fatto fuori dagli schemi con una stringa di formato adeguata.
Cyupa

In questo modo il numero massimo di S è tre, ad esempio SSS. Se ne aggiungi di più ottieni solo zeri, ad esempio per timeIntervalSince1970 di 1415986217.544384 e .SSSSSS ottieni .544000 quindi non è un'ottima soluzione.
malhal

@Cyupa Un millisecondo è solo 1/1000 di secondo. 6 posizioni decimali sono microsecondi e 1 cifra decimale è decisecondi. - Usare millisecondi per un numero qualsiasi di decimali è sbagliato quanto usare letteralmente per qualcosa in senso figurato; puoi ancora farlo, ma questo sta cambiando il significato della parola.
Liggliluff


4

Devi passare lo stesso numero di "S" alla fine, ad esempio La mia data era "2015-11-17T03: 36: 45.041503Z", io ho usato "yyyy-MM-dd'T'HH: mm: ss.SSSSSSz" formattatore, voglio dire vedere il numero di 'S' è 6 come 6 cifre in arrivo.


Cosa sarebbe formattato per ottenere nanosecondi in microsecondi invece che in millisecondi. Ho provato con 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' e 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSSSSz' e non funziona.
IndexOutOfDevelopersException

-1

utilizzare SSSper tre cifre decimali di secondo

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

Quello fallisce. Non ho una data indietro.
ageektrapped
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.