2015-10-15 22 views
9

To jest mój kod:Swift NSDateFormatter nie używając poprawnego ustawienia regionalne i 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) 

Spodziewałem się dostać "15 października 2015", ale mam "Październik 15, 2015". Miesiąc jest w szwedzkim języku.

Co zrobiłem źle? Zarówno ustawienia regionalne, jak i format są nieprawidłowe.

+0

próbowałem ten sam kod i jestem uzyskiwanie tego wyniku 15 października 2015 r. –

Odpowiedz

12

Zapoznaj się z documentation z dateFormatFromTemplate. Stwierdza ona, że:

Return Value

zlokalizowane format daty ciąg reprezentujący elementy formatu daty podane w szablonie, rozmieszczone odpowiednio do lokalizacji określonej przez lokalizacji.

Zwrócony ciąg może nie zawierać dokładnie tych komponentów podanych w szablonie , ale można na przykład zastosować specyficzne ustawienia regionalne .

To jest problem z aranżacją i językiem. Aby uzyskać informacje o dacie szukasz trzeba ustawić datę formater za dateFormat i locale następująco:

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

Prawdopodobnie literówka :-). LocaleIdentifier ma podkreślenie "en_US". – kometen

13

Spróbuj tego:

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

Mam nadzieję, że to pomoże.

+0

Jaka jest różnica między robieniem lokalnego en_US_POSIX a en-US ?? Powyższa odpowiedź wydaje się być w inny sposób – Thomas

2

wypróbować ten kod

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

// poniedziałek, 03 kwietnia 2017 ...

3

Lepsze Swift 3/3,1 rozwiązanie:

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