2017-07-24 209 views
1

由於某種原因未能將字符串轉換爲NSDate。DateFormatter dateFromString總是在swift中返回nil

這是我的日期轉換代碼:

let kSQLiteDateFormat : String = "yyyy/MM/dd HH:mm:ss Z" 
let dateFormat = [kSQLiteDateFormat, 
"dd MM, yyyy", 
"MMM-yyyy", 
"yyyy-MM-dd", 
"yyyy-12", 
"yyyy/MM/dd", 
"yyyy/mm/dd", 
"yyyy-MM-dd HH:mm:ss", 
"yyyy-MM-dd HH:mm:ss Z", 
"yyyy-MM-dd HH:mm:ss K", 
"yyyy-MM-dd HH:mm:ss ZZ", 
"yyyy/MM/dd hh:mm a", 
"MM/dd/yyyy", 
"MM/dd/yyyy HH:mm:ss Z", 
"h:mm a", 
"hh:mm a", 
"yyyy/MM/dd HH:mm:ss Z", 
"yyyy/MM/dd h:mm a", 
"MM/dd/yyyy h:mm a", 
"yyyy-MM-dd h:mm a", 
"yyyy-MM-dd'T'hh:mm:ss", 
"yyyy/MM/dd h a", 
"yyyy-MM-dd'T'HH:mm:ss","dd MMM, yyyy","dd-MM-yyyy HH:mm", "EEE, MMM dd","MM/dd/yyyy hh:mm:ss a"] 


if let dateString : String = dateString as String? { 
     let dateFormatter : DateFormatter = DateFormatter() 
     for format in dateFormat { 

      dateFormatter.dateFormat = format 
      if let date : NSDate = (dateFormatter.date(from: dateString)! as NSDate) { 
       return date 
      } 
     } 
    } 
    return nil 

每次回零

+3

什麼是你的日期字符串 –

+0

'dateFormat'需要匹配dateString。但是有很多和很多的可能性。你可以嘗試最常見的,但並不意味着它會起作用。什麼是'dateString'。 – Larme

+0

'dateFormatter.date(from:dateString)'返回'Date',而不是'NSDate' –

回答

1

if let date : NSDate = (dateFormatter.date(from: dateString)! as NSDate) { 
    return date 
} 

強制展開使得程序崩潰,如果dateString不匹配的日期格式和dateFormatter.date(from: dateString)回報nil

你可能想要的是

if let date = dateFormatter.date(from: dateString) { 
    return date 
} 

,或者,如果你真的需要一個NSDate而不是Date

if let date = dateFormatter.date(from: dateString) { 
    return date as NSDate 
} 

此外,你可能要設置格式的定位爲「POSIX 「

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

爲了避免依賴關係y對用戶的區域偏好, 比較DateFormatter doesn't return date for "HH:mm:ss"

+0

爲我工作表示感謝 –

0

從你的代碼就可以在這一行

return nil 

和手段,這能返回零隻檢查返回虛假

if let dateString : String = dateString as String?

檢查你的dateString變量也許它是零。

+0

我的detestring是「06/02/2017 03:05:12 PM」 –

+0

你可以在這裏粘貼整個函數,你用來獲取日期的完整代碼嗎? –

+0

class func dateFromString(dateString:String) - > NSDate?如果讓dateString:String = dateString作爲String? { 讓dateFormatter:DateFormatter = DateFormatter() 在DATEFORMAT {格式 dateFormatter.dateFormat =格式 如果讓日期:NSDate的=(dateFormatter.date(來自:dateString)作爲NSDate的){ 歸期 } } } return nil } –

相關問題