Ios Swift NSDateFormatter未使用正确的区域设置和格式

Ios Swift NSDateFormatter未使用正确的区域设置和格式,ios,swift,nsdate,nsdateformatter,Ios,Swift,Nsdate,Nsdateformatter,这是我的代码: let currentDate = NSDate() let usDateFormat = NSDateFormatter() usDateFormat.dateFormat = NSDateFormatter.dateFormatFromTemplate("d MMMM y", options: 0, locale: NSLocale(localeIdentifier: "en-US")) cmt.date = usDateFormat.stringFromDate(curre

这是我的代码:

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)
我本来希望得到“2015年10月15日”,但我得到了“2015年10月15日”。这个月是瑞典当地的

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

请检查
dateFormatFromTemplate
的。它指出:

返回值

表示日期的本地化日期格式字符串 格式化模板中给定的组件,并为 由区域设置指定的区域设置

返回的字符串可能不完全包含中给定的组件 模板,但可能有特定于区域设置的调整 应用

这就是安排和语言的问题。要获取要查找的日期,您需要设置日期格式化程序的
dateFormat
locale
,如下所示:

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = "d MMMM y"
usDateFormat.locale = NSLocale(localeIdentifier: "en_US")
cmt.date = usDateFormat.stringFromDate(currentDate)
试试这个:

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)
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!)
我希望它有帮助。

试试这段代码

let locale1:Locale = NSLocale(localeIdentifier: "en_US") as Locale
var date =  Date().description(with: locale1)
print(date)

//2017年4月3日星期一……

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

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")

您可以在Swift5中使用日期扩展名:

extension Date {
    var timestamp: String {
        let dataFormatter = DateFormatter()
        dataFormatter.locale = Locale(identifier: "en_US_POSIX")
        dataFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS"
        return String(format: "%@", dataFormatter.string(from: self))
    }
}
您可以通过以下方式获得时间戳:

print("Now: \(Date().timestamp)")

我尝试了相同的代码,得到了2015年10月15日的输出,很可能是一个输入错误:-)。LocaleIdentifier带有下划线“en_US”。使用本地en_US_POSIX与en US有什么区别??上面的答案似乎是用另一种方式解决的。对于当前的系统语言环境,有什么解决方案不必指定en_US?