2015-10-15 4 views
9

Это мой код:Swift NSDateFormatter не используя правильную локаль и формат

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) 

я ожидал получить «15 октября 2015 года», но я получил «Oktober 15, 2015». Месяц находится в шведском языке.

Что я сделал не так? И язык, и формат неверны.

+0

я попробовал тот же код, и я получение этого выпуска 15 октября 2015 г. –

ответ

12

Проверьте documentation от dateFormatFromTemplate. Он гласит, что:

Возвращаемое значение

Локализованный формат даты строка, представляющая компоненты формата даты , указанные в шаблоне, расположенных соответствующим образом для местности, указанной местности.

Возвращенная строка может содержать не те компоненты, которые указаны в шаблоне , но может быть, например, иметь корректировки, специфичные для локали .

Так что проблема с организацией и языком. Для того, чтобы получить дату, которую вы ищете вам необходимо установить дату, форматировщика dateFormat и locale следующим образом:

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

Возможно опечатка :-). LocaleIdentifier имеет знак подчеркивания «en_US». – kometen

13

Попробуйте это:

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

Я надеюсь, что это помогает.

+0

В чем разница между локальным en_US_POSIX и en-US? Ответ выше, похоже, делает это по-другому – Thomas

2

попробовать этот код

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

// понедельник, 3 Апреля 2017 ...

3

Лучше Swift 3/3,1 Решение:

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier: "en_US") 
Смежные вопросы