我的dob对象的属性PatientString,当前正在存储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

接下来,我必须将localedateFormatter设置为fr
dateFormatter.locale = NSLocale.init(localeIdentifier: "fr")
let frenchDate       = dateFormatter.stringFromDate(date!) // now it is 12-Janv.-2017

我认为这不是进行转换的最佳方法。还有其他有效的方法吗?欢迎任何评论。

最佳答案

(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")
    }
    

    10-07 13:13
    查看更多