【问题标题】:String to NSDate conversion works in English, but not in Russian字符串到 NSDate 的转换适用于英语,但不适用于俄语
【发布时间】:2016-04-08 13:40:30
【问题描述】:

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

【问题讨论】:

  • “我已检查 [字符串] 是否与 unicode 格式匹配”是什么意思?该字符串是否包含四月的实际俄语名称?还是要在俄语环境中转换英文字符串?
  • 可能是因为 Apr 不是俄语?请检查这个,您可以设置语言环境,这样您就不会遇到问题。 . -> stackoverflow.com/a/6735644/767329
  • 字符串始终为英文,日期格式为“10 Apr 2016”。 Unicode 格式是指 styler.dateFormat 字符串值与 LDML (unicode.org/reports/tr35/tr35-dates.html#Date_Patterns_AM_PM) 匹配,所以它是正确的。

标签: string swift localization nsdate nsdateformatter


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2011-02-19
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多