2017-01-12 2 views
1

내 재산 dob 객체가 String 현재 12-Jan-2017를 저장하고 나는 그런 12-Janv.-2017로 프랑스어 로케일로 변환 할 Patient의. 나는 그것이 최선의 방법이라고 생각하지 말아 fr가장 좋은 방법은, 현지화

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

dateFormatterlocale을 설정해야 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 

다음에 12-Jan-2017 변환

: 아래

내 단계입니다 전환하기. 다른 효과적인 방법이 있습니까? 모든 의견을 환영합니다.

+0

. 너 무슨 걱정이야? –

+0

@MartinR : 제가 염려하는 것은 단지 2 단계가 필요하다는 것입니다 :'1. Jan을 1로, 2를 1로 변환합니다. 1을 Janv로 변환하라. 나는 Jan을 Janv로 직접 변환하는 방법이 있어야한다고 생각했다. – tonytran

답변

3

(NS)DateFormatter에는 날짜를 문자열 표현으로 또는 그 반대로 변환하는 방법이 있습니다. 을 중간 날짜없이 다른 형식으로 직접 변환하는 (기본 제공) 메서드가 없습니다 (NS)Date. 그래서 당신이하고있는 것은 괜찮습니다. 하지만

제안 :

  • 를 사용하여 바인딩을 선택하는 대신 입력 문자열이 유효한 형식이 아닌 경우 런타임에 충돌 을 피하기 위해 풀기 강요했다.
  • DateFormatter.dateFormat(fromTemplate:...)을 사용하면 선택한 로케일에 맞는 날짜 형식 문자열을 얻을 수 있습니다.

그런 다음 코드 (스위프트 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") 
}