2015-10-15 8 views
9

Das ist mein Code:Swift NSDateFormatter mit nicht korrekten locale und Format

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) 

ich erwartete "15. Oktober 2015" zu bekommen, aber ich habe "Oktober 15, 2015". Der Monat ist in schwedischer Sprache.

Was habe ich falsch gemacht? Sowohl das Gebietsschema als auch das Format sind falsch.

+0

ich den gleichen Code versucht, und ich bin bekommen diese Ausgabe Oktober 15, 2015 –

Antwort

12

Überprüfen Sie die documentation von dateFormatFromTemplate. Es besagt, dass:

Rückgabewert

Ein lokalisierte Datumsformat Zeichenfolge, die die Datumsformat Komponenten in Vorlage gegeben, in geeigneter Weise für die durch locale angegebenen locale angeordnet.

Die zurückgegebene Zeichenfolge enthält möglicherweise nicht genau die Komponenten, die in der Vorlage angegeben sind. Sie kann jedoch z. B. länderspezifische Anpassungen angewendet haben.

Also das ist das Problem über die Anordnung und Sprache. Um das Datum, das Sie suchen für Sie Datum Formatierer des dateFormat und locale wie folgt festlegen müssen:

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

Wahrscheinlich ein Tippfehler :-). LocaleIdentifier hat einen Unterstrich "en_US". – kometen

13

Versuchen Sie folgendes:

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

Ich hoffe, es hilft.

+0

Was ist der Unterschied zwischen lokalen en_US_POSIX vs en-US ?? Die obige Antwort scheint es anders zu machen – Thomas

2

versuchen diesen Code

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

// Montag, 3. April 2017 ...

3

Bessere Swift 3/3.1 Lösung:

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