2017-01-12 2 views
1

Моей собственности dob из Patient объект String и в настоящее время хранения 12-Jan-2017, и я хочу, чтобы преобразовать его в французскую местность, такие как 12-Janv.-2017.лучший способ для преобразования даты на английском языке французского, NSDate, локализация

Ниже приведены мои шаги:

Преобразование 12-Jan-2017 в 1954-09-07 04:00:00 UTC

let dateFormatter  = NSDateFormatter() 
dateFormatter.locale  = NSLocale.init(localeIdentifier: "en_US_POSIX") 
dateFormatter.dateFormat = "dd-MMM-yyyy" 
let date     = dateFormatter.dateFromString("12-Jan-2017") // now date is 1954-09-07 04:00:00 UTC 

Далее я должен установить locale из dateFormatter в fr

dateFormatter.locale = NSLocale.init(localeIdentifier: "fr") 
let frenchDate  = dateFormatter.stringFromDate(date!) // now it is 12-Janv.-2017 

Я не думаю, что это лучший способ для преобразования. Есть ли другой эффективный способ для этого. Любые комментарии приветствуются.

+0

Это именно то, как это делается. Что вас беспокоит? –

+0

@MartinR: Единственное, что касается меня, это то, что мне требуется 2 шага: '1. конвертируя Jan в 1', затем '2. конвертировать 1 в Janv''. Я думал, что должен быть способ напрямую конвертировать «Ян» в «Янв» – tonytran

ответ

3

(NS)DateFormatter имеет методы преобразования даты в строковое представление и наоборот. Нет (встроенного) метода для преобразования из одного формата даты непосредственно в другой формат без промежуточного уровня (NS)Date. Так что вы делаете хорошо.

Некоторые предложения, хотя:

  • Используйте опциональный связывание вместо принудительного разворачивания, чтобы избежать аварии во время выполнения, если входная строка не в правильном формате.
  • Используйте DateFormatter.dateFormat(fromTemplate:...), чтобы получить строку формата даты , соответствующую выбранному языку.

Тогда ваш код будет (в Swift 3):

let inputDate = "12-Jan-2017" 

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier: "en_US_POSIX") 
dateFormatter.dateFormat = "dd-MMM-yyyy" 

if let date = dateFormatter.date(from: inputDate) { 
    dateFormatter.locale = Locale(identifier: "fr") 
    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "dd-MMM-yyyy", options: 0, locale: dateFormatter.locale) 

    let frenchDate = dateFormatter.string(from: date) 
    print(frenchDate) // 12 janv. 2017 
} else { 
    print("invalid input date") 
} 
Смежные вопросы