字符串到 NSDate 的转换适用于英语,但不适用于俄语

标签 string swift localization nsdate nsdateformatter

我已经为 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) 总是返回 nil。

最佳答案

如果没有另外配置,NSDateFormatter 使用默认语言环境来解析字符串。如果您将计算机切换到俄语,它将期望俄语月份名称。 “Apr”不是俄语,因此它无法将该字符串解析为有效月份。

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

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

关于字符串到 NSDate 的转换适用于英语,但不适用于俄语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36501117/

相关文章:

c++ - 检查 Char 中的空格和检查字符串中的数字

ios - 转到 UISlider 的点击位置

ios - 如何注册通知类别?

ios - 获取所有语言的 Apple 第一方 iOS 应用程序的本地化名称?

iOS:本地化多行字符串文字

java - 如何在 If 语句中使用数组

php - 如何从 PHP 中的多维数组中删除空值?

java - 在JDK 1.6中,String的equals操作可以用==代替吗?

ios - 如果特定的 View Controller 在屏幕上可见,如何从 View Controller 或类检查?或者我如何检查可见 View Controller ?

iphone - xcode iOS 获取所有本地化的列表