2015-10-15 23 views
9

這是我的代碼:斯威夫特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(currentDate) 

我期待得到「2015年10月15日」,但我得到了「十月15,2015年」。該月份在瑞典語區域。

我做了什麼錯?區域設置和格式都是錯誤的。

+0

我嘗試相同的代碼,我得到這個輸出2015年10月15日 –

回答

12

查看dateFormatFromTemplatedocumentation。它指出:

返回值

表示模板給出的日期 格式組分A本地化的日期格式字符串,適當地設置用於通過區域指定的區域設置 。

返回的字符串可能並不完全包含 模板中給出的那些組件,但可能(例如)可能會應用特定於區域設置的調整 。

這就是關於排列和語言的問題。爲了得到你正在尋找的日期,你需要設置日期格式的dateFormatlocale如下:

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

可能是一個錯字:-)。 LocaleIdentifier帶有下劃線「en_US」。 – kometen

13

試試這個:

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) 

斯威夫特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!) 

我希望它有幫助。

+0

做本地en_US_POSIX vs en-US有什麼區別?上面的答案似乎是另一種方式 – Thomas

2

試試這個代碼

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

//星期一,2017年4月3日...

3

更好的斯威夫特3/3.1的解決方案:

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