2016-06-20 24 views
6

ich ein Datum Zeichenfolge in diesem Format habe:Convert Datum String swift

2016-06-20T13:01:46.457+02:00 

und ich brauche es, um etwas zu ändern:

20/06/2016 

Früher hat ich immer diese Bibliothek verwendet habe ->SwiftDate die Daten zu manipulieren, aber es funktioniert jetzt nicht.

Ich habe auch versucht, so etwas wie:

let myDate = self.dateNoteDict[indexPath.row]! 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx" 
    let date = dateFormatter.dateFromString(myDate) 
    print("date -> \(date)") 

aber es funktioniert nicht. Wie kann ich?

Vielen Dank im Voraus.

+1

Das Datumsformat ' "yyyy-MM-dd hh: mm: ss.SSSSxxx"' nicht mit dem Format der Zeichenfolge '2016-06-20T13: 01: 46,457 + 02: 00 '. Zum Beispiel, wo ist das "T" im Datumsformat? – Larme

+0

Ich weiß, aber ich kann nicht die richtige Übereinstimmung finden – Jigen

+1

Dieses Dokument ist sehr hilfreich: http://i.stack.imgur.com/lkYVY.png – Moritz

Antwort

18

Das Standard ISO8601 Datumsformat mit fraktionierten Sekunden und Zeitzone ist

yyyy-MM-dd'T'HH: mm: ss.SSSZ

let myDate = "2016-06-20T13:01:46.457+02:00" 
let dateFormatter = NSDateFormatter() 
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") // edited 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
let date = dateFormatter.dateFromString(myDate)! 
dateFormatter.dateFormat = "dd/MM/yyyy" 
let dateString = dateFormatter.stringFromDate(date) 

Swift 3:

let myDate = "2016-06-20T13:01:46.457+02:00" 
let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // edited 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
let date = dateFormatter.date(from:myDate)! 
dateFormatter.dateFormat = "dd/MM/yyyy" 
let dateString = dateFormatter.string(from:date) 
+1

Es funktioniert. Danke für die Hilfe und für die Erklärung. +1 – Jigen

+0

NSDateFormatter() ist veraltet seit Swift 3 – tmuecksch

+0

Diese Konvertierung gibt mir das Datum in UTC, ich möchte es in mein lokales Datum konvertieren –

4

Ich verwende diesen Code immer beim Konvertieren von String bis Date. (Swift 3)

extension String 
{ 
    func toDate(dateFormat format : String) -> Date 
    { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = format 
     if let date = dateFormatter.date(from: self) 
     { 
      return date 
     } 
     print("Invalid arguments ! Returning Current Date . ") 
     return Date() 
    } 
} 

und rufen wie. .

print ("2016-06-20T13:01:46.457+02:00".toDate(dateFormat: "yyyy-MM-dd'T'HH:mm:ss.SSSZ")) 
//Capital HH for 24-Hour Time