字符串到NSDate的转换在英语中有效,但在俄语中无效



我为String:编写了这样的扩展

extension String {
    var asDate : NSDate! {
        print(self)
        let styler = NSDateFormatter()
        styler.dateFormat = "dd MMM yyyy"
        print(styler.dateFromString(self))
        if let aStyler = styler.dateFromString(self) {
            return aStyler
        } else {
            return NSDate()
        }
    }
}

我注意到它只有在设备上设置了英语时才有效。然而,例如,它不适用于俄语。为什么?

它需要一个字符串,例如"2016年4月10日",它应该将此字符串转换为日期。但是,当语言不是英语时,styler.dateFromString(self)总是nil。我已经检查了self(我想要转换的字符串)是否与unicode格式匹配。但是,我不明白为什么styler.dateFromString(self)总是返回零。

如果未进行其他配置,NSDateFormatter将使用默认语言环境来解析字符串。如果你把电脑换成俄语,它会显示俄语月份名称Apr不是俄语,因此它无法将该字符串解析为有效月份。

如果要解析的字符串始终是英语,则需要将格式化程序的语言环境设置为英语语言环境。像这样:

let df        = NSDateFormatter()
df.locale     = NSLocale(localeIdentifier: "en_US")
df.dateFormat = "dd MMM yyyy"
let date      = df.dateFromString("21 Apr 2016")

最新更新