我正在使用字符串擴展函數來轉換日期字符串。該功能是:SWIFT DateFormatter結果不一致
func convertDateString() -> String {
let dateFormater = DateFormatter()
var returnString = ""
dateFormater.dateFormat = "yyyy-MM-dd'T'hh:mm:ss'Z'" // Takes the format from the JSON journal entry for elite dangerous
dateFormater.locale = Locale.current
if let dateObj = dateFormater.date(from: self) {
dateFormater.dateFormat = "dd MMM yyyy hh:mm:ss" // Converts it to a new string (as a date object)
returnString = dateFormater.string(from: dateObj) // Converts the date object back to a string
} else {
returnString = "Error converting date"
}
return returnString
}
我使用的數據集這是一個系列的JSON對象調用的字符串延伸的結果的一部分從JSON參考文件轉換的。
我正在兩臺機器上工作 - 一臺MACPRO和一臺MacBookAir。兩者都運行相同版本的MacOS(10.12.5)和相同版本的Xcode。
當我在MACPRO上運行應用程序時,它會解析JSON對象文件而不會出現問題,並按照上述函數中的預期正確轉換每個日期。但是,當我在MacBookAir上運行應用程序時,在完全相同的數據文件上,JSON對象文件似乎在沒有問題的情況下被解析,但是某些(幾個百分比)的日期不會按預期進行轉換 - 它們會失敗if let dateObj = dateFormater.date(from: self)
語句和作爲「錯誤轉換日期」返回。
我不知道發生了什麼。我曾嘗試刪除dateFormater.locale = Locale.current
,這沒有什麼區別。
相同的JSON對象產生錯誤(即每次運行文件時,它都是產生「錯誤轉換日期」響應的相同JSON對象)。當我在文本編輯器中查看JSON對象文件時,JSON對象似乎沒有問題(我也在一個在線JSON對象格式化程序中確認了這一點,並且它正確讀取了JSON對象。)
我也應該補充說我正在使用SwiftyJSON來解析JSON對象。
任何幫助或建議感激地收到。
有沒有辦法讓我的代碼更健壯?任何人都可以提出,爲什麼不同的機器可能會有所作爲,因爲應用程序的數據文件,Xcode和MacOS都是一樣的。
Apple在[本文](https://developer.apple.com/library/content/qa/qa1480/_index.html)中寫了類似的問題。如果你的目標是OS X 10.12及以上版本,請使用['ISO8601DateFormatter'](https://developer.apple.com/reference/foundation/nsiso8601dateformatter) –
你應該在你的問題中包含有問題的字符串。 – rmaddy
你不應該去看Z.hh是錯誤的(這是12h格式)。你需要使用HH(00-23)。並將你的格式化區域設置爲'「en_US_POSIX」'。你應該檢查這個https://stackoverflow.com/questions/28016578/swift-how-to-create-a-date-time-stamp-and-format-as-iso-8601-rfc-3339-utc-tim/ 28016692#28016692 –