web-dev-qa-db-fra.com

Swift NSDateFormatter n'utilise pas les paramètres régionaux et le format corrects

Voici mon code:

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)

Je m'attendais à obtenir le "15 octobre 2015", mais j'ai obtenu le "15 octobre 2015". Le mois est en langue suédoise.

Qu'est ce que j'ai mal fait? Les paramètres régionaux et le format sont incorrects.

15
Lord Vermillion

Essaye ça:

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!)

J'espère que ça aide.

23
ikbal

Consultez la documentation de dateFormatFromTemplate. Il déclare que:

Valeur de retour

Chaîne de format de date localisée représentant les composants de format de date donnés dans le modèle, organisés de manière appropriée pour les paramètres régionaux spécifiés par les paramètres régionaux.

La chaîne renvoyée peut ne pas contenir exactement les composants donnés dans le modèle, mais peut, par exemple, appliquer des ajustements spécifiques aux paramètres régionaux.

C'est donc le problème de l'arrangement et de la langue. Pour obtenir la date que vous recherchez, vous devez définir le dateFormat et locale du formateur de date comme suit:

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

Mieux Swift 3/3.1 solution:

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

essayez ce code

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

// Lundi 3 avril 2017 ...

3
mahdiTGK