2015-09-05 10 views
14

Realmente non capisco cosa stia succedendo con questo codice, sto provando a convertire una stringa fino ad oggi. Quello che non capisco è che la conversione funziona per la maggior parte delle date, ma non funziona appositamente per solo 2 date.NSDateFormatter.dateFromString restituisce nil per date specifiche in lingue specifiche

let dateFormatter = NSDateFormatter() 
dateFormatter.locale = NSLocale(localeIdentifier: "es") 
dateFormatter.dateFormat = "dd 'de' MMMM" 

dateFormatter.dateFromString("1 de octubre") 
dateFormatter.dateFromString("2 de octubre") 
dateFormatter.dateFromString("3 de octubre") 
dateFormatter.dateFromString("4 de octubre") 
dateFormatter.dateFromString("5 de octubre") 
dateFormatter.dateFromString("6 de octubre") 
dateFormatter.dateFromString("7 de octubre") 
dateFormatter.dateFromString("8 de octubre") 
dateFormatter.dateFromString("9 de octubre") 
dateFormatter.dateFromString("10 de octubre") 
dateFormatter.dateFromString("11 de octubre") 
dateFormatter.dateFromString("12 de octubre") 
dateFormatter.dateFromString("13 de octubre") 
dateFormatter.dateFromString("14 de octubre") 
dateFormatter.dateFromString("15 de octubre") 
dateFormatter.dateFromString("16 de octubre") 
dateFormatter.dateFromString("17 de octubre") 
dateFormatter.dateFromString("18 de octubre") 
dateFormatter.dateFromString("19 de octubre") 
dateFormatter.dateFromString("20 de octubre") 
dateFormatter.dateFromString("21 de octubre") 
dateFormatter.dateFromString("22 de octubre") 
dateFormatter.dateFromString("23 de octubre") 
dateFormatter.dateFromString("24 de octubre") 
dateFormatter.dateFromString("25 de octubre") 
dateFormatter.dateFromString("26 de octubre") 
dateFormatter.dateFromString("27 de octubre") 
dateFormatter.dateFromString("28 de octubre") 
dateFormatter.dateFromString("29 de octubre") 
dateFormatter.dateFromString("30 de octubre") 

ho fatto questo codice per provare nel parco giochi, ma riproduce alcune date che sto ricevendo nel mio codice di produzione. Date un'occhiata nell'output che questo codice produce:

Playground output

Come si può vedere nell'immagine, non funziona per l'8 ottobre e 15. Opere per tutti gli altri. Ho anche provato agosto e settembre, e in quei mesi tutti i giorni lavoravano. Ho anche provato a inserire le date in portoghese in locale pt-br, e inoltre non funziona per l'8 e il 15 ottobre. È spiegabile?


Aggiornamento: codice @zneak produce il seguente output per me:

output

In altre parole, smise di correre 8 ottobre

+0

non riesco a riprodurre il problema con [il programma] (http : //pastebin.com/x4nyXc1M). – zneak

+0

Ti stai fidando del debugger. Non fidarti mai del debugger. Assegna il risultato a una variabile e registralo. –

+0

@zneak, il tuo codice produce lo stesso errore per me. –

risposta

4

Xcode 8.2.1 • Swift 3.0. 2

let dateFormatter = DateFormatter() 
dateFormatter.calendar = Calendar(identifier: .iso8601) 
dateFormatter.locale = Locale(identifier: "es") 
dateFormatter.dateFormat = "dd 'de' MMMM" 
dateFormatter.date(from: "8 de octubre") // "Oct 8, 2000, 1:00 AM" 

2.x Swift

Hai solo bisogno di impostare la data di proprietà del calendario formattatore:

let dateFormatter = NSDateFormatter() 

// add a calendar 
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601) 

dateFormatter.locale = NSLocale(localeIdentifier: "es") 
dateFormatter.dateFormat = "dd 'de' MMMM" 

enter image description here

+0

Per me, ha funzionato senza impostare un calendario. Riesci a riprodurre il problema senza impostarlo? – zneak

+0

Sì, senza impostare un calendario, restituisce zero. Dipende dalla tua posizione –

+0

Ho provato [impostando un formattatore di date in ogni calendario là fuori] (http://pastebin.com/yWs6nCWA) e gli unici con cui il programma di formattazione non riesce ad analizzare le date sono cinesi, ebraici, islamici, islamici Civile, persiano e indiano; falliscono su tutta la linea, non solo per due date al mese. Qual è l'identificativo del tuo calendario iniziale? – zneak

Problemi correlati