2016-05-04 13 views
-1

私は、次のコードを持っている:SwiftのNSDateFormatterで入力日付フィールドをpasingした後にnilが発生するのはなぜですか?

messageDictionary["date"] = dataArray[3] as! String 
print(messageDictionary["date"]) 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 

let sent_date = dateFormatter.dateFromString(messageDictionary["date"] as! String) 

print("SENT DATE IS \(sent_date)") 

それからの出力は次のとおりです。

Optional(2016-28-04T18:05:34.978UTC) 
SENT DATE IS nil 

形式は、入力文字列と同じであるので、2行目に、私はnilを取得していますなぜ?

+2

16ヶ月以上の広告がない限り私が探していなかったときにあなたのMMとDDをあなたの日付形式に入れ替えました。 – dan

+0

@ダンそれは、ええと、いつもそれらの小さな詳細...あなたが十分にお気軽に答えを提出し、私はそれを正しいものとしてマークします、ありがとう! – user3766930

答えて

1

dateFormatterのdateFormatは、NSDateを作成しようとしている文字列とは異なります。

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 

する必要があります:あなたは別の日付形式を使用している場合

dateFormatter.dateFormat = "yyyy-dd-MM'T'HH:mm:ss.SSSZ" 

はしかし、私はNSDateのための拡張機能を作成するお勧めします。これにより

extension NSDate { 

    enum DateFormats: String { 
     case ISO = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
     case YYMMDD = "yyyy-MM-dd" 
    } 

    convenience init?(dateString: String, format: DateFormats) { 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = format.rawValue 

     guard let d = dateFormatter.dateFromString(dateString) else { return nil } 
     self.init(timeInterval: 0, sinceDate: d) 
    } 
} 

あなたが今行うことができます。

let newDate = NSDate(dateString: "2016-28-04T18:05:34.978UTC", format: .ISO) 
関連する問題