将英语日期转换为法语,nsdate,本地化的最佳方法

时间:2017-01-12 20:10:30

标签: ios swift nsdate nsdateformatter nslocale

dob对象的Patient属性为String且当前正在存储12-Jan-2017,我想将其转换为法语区域设置,例如12-Janv.-2017

以下是我的步骤:

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的{​​{1}}设置为dateFormatter

fr

我不认为这是进行转换的最佳方式。有没有其他有效的方法。欢迎提出任何意见。

1 个答案:

答案 0 :(得分: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")
}