2015-09-05 57 views
14

我真的不知道這段代碼發生了什麼,我試圖將字符串轉換爲日期。我不明白的是,轉換適用於大部分日期,但不適用於只有兩個日期。NSDateFormatter.dateFromString在特定語言的特定日期返回nil

let dateFormatter = NSDateFormatter() 
dateFormatter.locale = NSLocale(localeIdentifier: "es") 
dateFormatter.dateFormat = "dd 'de' MMMM" 

dateFormatter.dateFromString("1 de octubre") 
dateFormatter.dateFromString("2 de octubre") 
dateFormatter.dateFromString("3 de octubre") 
dateFormatter.dateFromString("4 de octubre") 
dateFormatter.dateFromString("5 de octubre") 
dateFormatter.dateFromString("6 de octubre") 
dateFormatter.dateFromString("7 de octubre") 
dateFormatter.dateFromString("8 de octubre") 
dateFormatter.dateFromString("9 de octubre") 
dateFormatter.dateFromString("10 de octubre") 
dateFormatter.dateFromString("11 de octubre") 
dateFormatter.dateFromString("12 de octubre") 
dateFormatter.dateFromString("13 de octubre") 
dateFormatter.dateFromString("14 de octubre") 
dateFormatter.dateFromString("15 de octubre") 
dateFormatter.dateFromString("16 de octubre") 
dateFormatter.dateFromString("17 de octubre") 
dateFormatter.dateFromString("18 de octubre") 
dateFormatter.dateFromString("19 de octubre") 
dateFormatter.dateFromString("20 de octubre") 
dateFormatter.dateFromString("21 de octubre") 
dateFormatter.dateFromString("22 de octubre") 
dateFormatter.dateFromString("23 de octubre") 
dateFormatter.dateFromString("24 de octubre") 
dateFormatter.dateFromString("25 de octubre") 
dateFormatter.dateFromString("26 de octubre") 
dateFormatter.dateFromString("27 de octubre") 
dateFormatter.dateFromString("28 de octubre") 
dateFormatter.dateFromString("29 de octubre") 
dateFormatter.dateFromString("30 de octubre") 

我讓這段代碼在Playground中嘗試,但它重現了我在生產代碼中得到的一些日期。採取此代碼產生輸出一看:

Playground output

正如你可以在圖片中看到,它並不適用於10月8日和15工程工作的所有其他人。我也嘗試過8月和9月,在那幾個月裏,所有的日子都在工作。我還試圖用pt-br語言環境將葡萄牙語的日期放在10月8日和15日不起作用。它可以解釋嗎?


更新:@zneak代碼產生以下輸出對我來說:

output

換句話說,停止運行10月8日

+0

我無法用[本軟件]重現您的問題(HTTP ://pastebin.com/x4nyXc1M)。 – zneak

+0

您相信調試器。永遠不要相信調試器。將結果分配給一個變量並記錄下來。 –

+0

@zneak,你的代碼對我產生同樣的錯誤。 –

回答

4

的Xcode 8.2.1•斯威夫特3.0。 2

let dateFormatter = DateFormatter() 
dateFormatter.calendar = Calendar(identifier: .iso8601) 
dateFormatter.locale = Locale(identifier: "es") 
dateFormatter.dateFormat = "dd 'de' MMMM" 
dateFormatter.date(from: "8 de octubre") // "Oct 8, 2000, 1:00 AM" 

斯威夫特2.x的

您只需要設置您的日期格式的日曆屬性:

let dateFormatter = NSDateFormatter() 

// add a calendar 
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601) 

dateFormatter.locale = NSLocale(localeIdentifier: "es") 
dateFormatter.dateFormat = "dd 'de' MMMM" 

enter image description here

+0

對我而言,它沒有設置日曆。你能否重現該問題而不設置它? – zneak

+0

是的,沒有設置日曆,它返回nil。這取決於你的位置 –

+0

我試過[爲每個日曆設置日期格式化程序](http://pastebin.com/yWs6nCWA),格式化程序無法解析日期的只有中文,希伯來文,伊斯蘭,伊斯蘭民間,波斯和印度;他們全線失敗,而不僅僅是每個月的兩個日期。什麼是您的初始日曆的標識符? – zneak