2017-06-18 1 views
-4

ich mit einer API arbeiten, wo einer der Parameter vom Typ Datum ist im Format „dd.MM.yyyy“.Convert Datum „dd.MM.yyyy“ -Format in Swift

Ich kann nicht verwalten . wandeln es ich habe eine Erweiterung für Datum, wo ich es auf diese Weise zu implementieren versucht:

extension Date { 

    var shortDate: Date { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "dd.MM.yyyy" 
    let strDate = formatter.string(from: self) 
    let modifiedDate = formatter.date(from: strDate) 
    return modifiedDate! 
    } 
} 

und ich nenne es wie folgt aus:

let day = Date().shortDate 

Leider funktioniert es nicht und es sieht aus wie dies:

2017-06-18 21:00:00 +0000

Wie kann ich es lösen?

+0

Das ist richtig. Welches Ergebnis erwartest du? – Sulthan

+0

@Sultan Ich erwarte, Nummer im Format zu erhalten 18.06.2017 – Melany

+0

Sie geben ein Datum zurück. Ein Datum hat kein Format und keine Zeitzone. Warum gibst du 'strDate' nicht zurück, das wahrscheinlich das korrekte Ergebnis enthält? – Sulthan

Antwort

1

Von dem, was ich verstehe, müssen Sie mit einer API kommunizieren, die Datum im Format "dd.MM.yyyy” darstellt. Hier sind die einfachen Funktionen müssen Sie implementieren:

class MyAPIFunctions 
{ 
    static let formatter: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.dateFormat = "dd.MM.yyyy" 

     // make sure the following are the same as that used in the API 
     formatter.timeZone = TimeZone(secondsFromGMT: 0) 
     formatter.locale = Locale.current 

     return formatter 
    }() 

    class func shortString(fromDate date: Date) -> String { 
     return formatter.string(from: date) 
    } 

    class func date(fromShortString string: String) -> Date? { 
     return formatter.date(from: string) 
    } 
} 

I formatter als separate Konstante erklärt haben, den Aufwand für die Wieder Initialisierung bei jedem Aufruf zu speichern. Sobald Sie diese Funktionen hinzugefügt haben, können Sie ein Datum an die API senden wie folgt:

let today = Date() 
let todayString = MyAPIFunctions.shortString(fromDate: today) 
// send todayString to API 

Um einen String in der API zu einem Date-Objekt zu konvertieren,

let apiString = "17.07.2017" 
guard let apiDate = MyAPIFunctions.date(fromShortString: apiString) else { 
    // deal with formatting error here 
    return 
} 
// work with apiDate object 
+1

Vergessen Sie nicht, dass Sie beim Analysieren/Codieren von API-Formaten immer das Gebietsschema festlegen sollten. Andernfalls können Sie überraschende Ergebnisse erzielen, wenn das aktuelle Gebietsschema einen nicht-gregorianischen Kalender verwendet. – Sulthan

0
let date = Date.init() 
     let formatter = DateFormatter() 
     formatter.dateFormat = "dd-MM-yyyy" 

     formatter.locale = NSLocale(localeIdentifier: "en_US") as Locale! 
     let strdate1 = formatter.string(from: date as Date) 

     print(strdate1) 
+0

natürlich danke für die Antwort, aber die Frage war nicht, wie man Datum in String umwandelt. aber wie man das Datum in ein Datum umwandelt. das war nicht klug von meiner Seite. – Melany

+0

Obwohl dieser Code die Frage beantworten kann (oder auch nicht), sollte man immer erklären, was er tut und wie er das Problem löst. – BDL