2010-11-14 7 views
8

Ho trascorso troppo tempo (più di un'ora) su quello che penso sarebbe un compito di due minuti. Su iPhone:Conversione ex. 2010-09-11T00: 00: 00 + 01: 00 formato per NSDate

NSString * dateString = @"2010-09-11T00:00:00+01:00"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssTZD"]; 
NSDate *date = [formatter dateFromString:dateString]; 

risultati: Date == nil

Che cosa mi manca !! (Oltre alla mia scadenza)

saluti,

Ken

+0

haha, ho pubblicato esattamente la stessa domanda 10 minuti fa: http://stackoverflow.com/questions/4179993 – samvermette

risposta

12

TZD non è un formattatore definito per the unicode spec. Il documento che hai collegato ad altri era un suggerimento che qualcuno ha fatto al W3C, solo per discussioni. Lo standard unicode seguito da Apple è uno standard finito, da un corpo diverso.

La cosa più vicina a quello che vuoi sarebbe ZZZ (cioè, @ "AAAA-MM-gg'T'HH: mm: ssZZZ"), ma che non ha i due punti nel mezzo. Così avresti bisogno di utilizzare la stringa:

2010-09-11T00:00:00+0100 

Piuttosto che quello che attualmente avete che finisce in 01: 00.

E.g. il seguente:

NSString * dateString = @"2010-09-11T00:00:00+0100"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; 
NSDate *date = [formatter dateFromString:dateString]; 
NSLog(@"%@", date); 

registra un oggetto data valida, di 2010-09-10 23:00:00 GMT.

+0

Grazie per quello. Poiché ricevo i codici temporali in due formati ... + 01:00 E ... Z vale a dire 2010-09-11T00: 00: 00Z, è sufficiente aggiungere i due punti per rimuovere il codice temporale 0000: 00 e verificare Z nel caso non fosse presente e cambi il codice in YYYY-MM-dd'T'HH: mm: ssZ in quel caso. - Frase confusa, ma è tardi, sono stanco ... Grazie! – gnasher

2

Suggerimento: provare a utilizzare il vostro formattatore convertire da un oggetto NSDate - una stringa, poi vedere quello che si ottiene. È spesso più facile eseguire il debug in quella direzione rispetto all'altra.

Hai letto questo?

http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

Che TZD alla fine della vostra stringa di formato sembra un po 'dubbia.

+0

TZD è il designatore del fuso orario. Vedi: http://www.w3.org/TR/NOTE-datetime – gnasher

+0

Questo è uno standard diverso da quello utilizzato da NSDateFormatter. Dai un'occhiata al link unicode.org. –

-1

Ho risolto questo problema utilizzando il codice this.

+1

Che codice ???? Link interrotti. – Brett

Problemi correlati