Ho cercato questo Wikipedia article per un riferimento a come funziona effettivamente ISO-8601. Non sono un esperto di Cocoa, ma sto scommettendo se puoi analizzare quella stringa ed estrarre il componente ora, minuto, secondo, giorno, ecc., Trovarlo in un NSTimeInterval dovrebbe essere facile. La parte difficile è analizzarlo. Probabilmente farei qualcosa del genere:
Prima dividere la stringa in due stringhe separate: una che rappresenta i giorni e una che rappresenta le volte. NSString ha un metodo di istanza componentsSeparatedByString:. NSString che restituisce un NSArray di sottostringhe del vostro NSString origine, separati dal parametro si passa Sarebbe simile a questa:
NSString* iso8601 = /*However you're getting your string in*/
NSArray* iso8601Parts = [iso8601 componentsSeparatedByString:@"T"];
Avanti, cerca il primo elemento di iso8601Parts per ogni dei possibili indicatori di durata del giorno (Y, M, W e D). Quando ne trovi uno, prendi tutte le cifre precedenti (e possibilmente un punto decimale), gettale su un float e memorizzale da qualche parte. Ricorda che se ci fosse solo un elemento temporale, iso8601Parts [0] sarà la stringa vuota.
Quindi, fare la stessa cosa cercando parti temporali nel secondo elemento di iso8601Parts per possibili indicatori di tempo (H, M, S). Ricorda che se c'era solo un componente del giorno (cioè non c'era il carattere 'T' nella stringa originale), allora iso8601Parts sarà solo di lunghezza uno, e un tentativo di accedere al secondo elemento causerà un'eccezione fuori dai limiti .
Un NSTimeInterval è solo un lungo immagazzinamento di un numero di secondi, quindi converti i singoli pezzi estratti in secondi, aggiungili insieme, memorizzali nel tuo NSTimeInterval e sei pronto.
Scusa, so che hai chiesto un modo "facile" per farlo, ma sulla base della mia (notoriamente leggera) ricerca e conoscenza dell'API, questo è il modo più semplice per farlo.
scrivere un parser piccolo non era esattamente quello che avevo in mente quando ho iniziato a cercare una soluzione facile, ma sembra che non ci sia davvero nessun altro modo. Ho pensato che potrebbe esserci un trucco usando una stringa di formato speciale con NSDateFormatter, ma non sembra funzionare con intervalli di tempo. Comunque, ho finito per scrivere un parser simile. Grazie a tutti per l'aiuto. – Zargony
Una piccola cosa da tenere a mente con l'esempio di codice precedente (sì, mi rendo conto che probabilmente è stato pensato per dimostrare un punto e non per il consumo effettivo). Lo standard ISO 8601 consente di specificare i valori di durata come valori frazionari (cioè 1,5, 0,6, ecc.) Che possono essere delimitati da "." o ",". –