2017-06-29 53 views
0

在我們的iphone應用程序中,我們解析了api調用得到的日期。日期正確返回並且是有效的日期。現在只有在某些設備上,它會在意外發現零的錯誤時崩潰,同時展開可選值。這裏是有問題的代碼:iPhone日期格式化程序隨機崩潰

//formatDate(date: date, format: FullDateFormat) 
class func formatDate(date: String, format: String)->String{ 
    if date.characters.count == 0 {return "" } 
    let formatter = DateFormatter() 
    formatter.dateFormat = Constants.FullDateFormat 
    let nsDate = formatter.date(from: date) 

    formatter.dateFormat = format 
    return formatter.string(from: nsDate!) 
} 

nsDate沒有被格式化,因爲它是零。

的Constants.FullDateFormat是定義爲「M/d/yyyy的H:mm:ss的一個」靜態字符串作爲日期將總是以這種格式

到類函數的調用將會看起來像這樣

let newDate = Helpers.formatDate(date: "9/27/2017 9:26:51 AM", format: "h:mm a") 

一些設備崩潰,而大多數設備崩潰。如果我們不使用類功能,則應用程序可以正常工作。我沒有看到任何原因,所以如果有人看到爲什麼會發生這種情況和可能的解決方案,請讓我知道。

這可能是重複的,但並未顯示在我執行的任何搜索中。感謝社區,他們指出了另外一個類似的問題,其答案已經在stackoverflow。如果這是重複的,我很抱歉。

+0

不應使用強迫的展開'nsDate',你應該把它放在警戒聲明中。大多數情況下,在你的應用程序崩潰的設備上,其他一些設置(例如語言環境)是不同的,這些會導致解析日期問題,因爲你沒有指定'DateFormatter'使用的相當多的信息 –

+0

Thanks Martin R我在搜索時沒有看到這種情況。我不介意刪除它,但它可以幫助其他人。我會通過編輯並指出您發佈的問題。 –

+0

解決方案與「Martin R」的建議相同,但我理解Micah的困惑。 – kulss

回答

2

這是一個地區的問題。 DateFormatter取決於設備的當前位置設置,包括日期和時間。

可以確保格式化的語言環境始終是靜態通過其區域設置爲en_US_POSIX

formatter.locale = Locale(identifier: "en_US_POSIX") 

看到蘋果的鏈接瞭解詳情:

https://developer.apple.com/documentation/foundation/nsdateformatter

+1

這是修復。感謝大家。 –