2015-10-15 34 views
9

Questo è il mio codice:Swift NSDateFormatter non utilizza corretta localizzazione e il formato

let currentDate = NSDate() 
let usDateFormat = NSDateFormatter() 
usDateFormat.dateFormat = NSDateFormatter.dateFormatFromTemplate("d MMMM y", options: 0, locale: NSLocale(localeIdentifier: "en-US")) 
cmt.date = usDateFormat.stringFromDate(currentDate) 

mi aspettavo di ottenere "15 ottobre 2015", ma ho ottenuto "Oktober 15, 2015". Il mese è in locale svedese.

Cosa ho fatto di sbagliato? Sia la lingua che il formato sono errati.

+0

ho provato lo stesso codice e sto ottenere questa uscita 15 ottobre 2015 –

risposta

12

Controllare lo documentation di dateFormatFromTemplate. Essa afferma che:

Return Value

Una stringa di formato data localizzato in rappresentanza delle componenti formato della data riportate nel modello, organizzato in modo appropriato per la versione locale specificato dal locale.

La stringa restituita potrebbe non contenere esattamente i componenti indicati nel modello ma, ad esempio, potrebbero essere applicate le rettifiche specifiche locali applicate.

Questo è il problema di organizzazione e lingua. Per ottenere la data che si sta cercando è necessario impostare la data di formattatore dateFormat e locale come segue:

let currentDate = NSDate() 
let usDateFormat = NSDateFormatter() 
usDateFormat.dateFormat = "d MMMM y" 
usDateFormat.locale = NSLocale(localeIdentifier: "en_US") 
cmt.date = usDateFormat.stringFromDate(currentDate) 
+0

Probabilmente un errore di battitura :-). LocaleIdentifier ha un trattino basso, "en_US". – kometen

13

Prova questo:

let dateString = "2015-10-15" 
let formater = NSDateFormatter() 
formater.dateFormat = "yyyy-MM-dd" 
print(dateString) 

formater.locale = NSLocale(localeIdentifier: "en_US_POSIX") 
let date = formater.dateFromString(dateString) 
print(date) 

Swift 3 Xcode 8

let dateString = "2015-10-15" 
let formater = DateFormatter() 
formater.dateFormat = "yyyy-MM-dd" 
print(dateString) 

formater.locale = Locale(identifier: "en_US_POSIX") 
let date = formater.date(from: dateString) 
print(date!) 

Spero possa essere d'aiuto.

+0

Qual è la differenza tra fare en_US_POSIX locale vs en-US ?? La risposta sopra sembra farlo in un altro modo – Thomas

2

provare questo codice

let locale1:Locale = NSLocale(localeIdentifier: "en_US") as Locale 
var date = Date().description(with: locale1) 
print(date) 

// Lunedi, mese di aprile 3, il 2017 ...

3

Meglio Swift 3/3,1 soluzione:

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier: "en_US")