Swift NSDateFormatter没有使用正确的语言环境和格式

Lor*_*ion 15 nsdate nsdateformatter ios swift

这是我的代码:

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = NSDateFormatter.dateFormatFromTemplate("d MMMM y", options: 0, locale: NSLocale(localeIdentifier: "en-US"))
cmt.date = usDateFormat.stringFromDate(currentDate)
Run Code Online (Sandbox Code Playgroud)

我期待着"2015年10月15日",但我得到了"2015年5月15日".这个月是瑞典语的地方.

我做错了什么?区域设置和格式都是错误的.

ikb*_*bal 24

试试这个:

let dateString = "2015-10-15"
let formater = NSDateFormatter()
formater.dateFormat = "yyyy-MM-dd"
print(dateString)

formater.locale =  NSLocale(localeIdentifier: "en_US_POSIX")
let date = formater.dateFromString(dateString)
print(date)
Run Code Online (Sandbox Code Playgroud)

Swift 3 Xcode 8

let dateString = "2015-10-15"
let formater = DateFormatter()
formater.dateFormat = "yyyy-MM-dd"
print(dateString)

formater.locale =  Locale(identifier: "en_US_POSIX")
let date = formater.date(from: dateString)
print(date!)
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.

  • 做本地en_US_POSIX和en-US有什么区别?上面的答案似乎是另一种方式 (3认同)

Zel*_* B. 14

退房的文件dateFormatFromTemplate.它指出:

回报价值

一个本地化的日期格式字符串,表示模板中给出的日期格式组件,适合于由locale指定的语言环境.

返回的字符串可能不完全包含模板中给出的那些组件,但可能 - 例如 - 应用了特定于语言环境的调整.

这就是安排和语言的问题.要获得您需要设置日期格式的您正在寻找的日期dateFormatlocale如下:

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = "d MMMM y"
usDateFormat.locale = NSLocale(localeIdentifier: "en_US")
cmt.date = usDateFormat.stringFromDate(currentDate)
Run Code Online (Sandbox Code Playgroud)


小智 6

更好的 Swift 3/3.1 解决方案:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
Run Code Online (Sandbox Code Playgroud)