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.