2017-08-24 1 views
0

Ich bin neu in der Swift-Bibliothek. Ich verwende den Kalender in swift und möchte die Ereignisse im Kalender anzeigen. Die Ereignisse werden von der Json API erhalten, aber wenn ich das Datum vergleiche, zeigt es einen Fehler an.Datumsformat Fehler in Swift

Dies ist der Code

let data = event["date"] as? String 
    let newString = data?.replacingOccurrences(of: "/", with: "-") 
    self.FirstData = self.EventDates[0] 

Vergleichsfunktion

func compareDate(date : String){ 
     let date = date 

     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
     ====>>>>Error in line 
    let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate 
     dateFormatter.dateFormat = "yyyy-MM-dd" 
     let datenew = dateFormatter.string(from: dateFromString as Date) 
     print("datee",datenew) 

    } 

Fehler: fataler Fehler: unerwartet gefunden Null, während ein optionaler Wert

Abwickeln Wie Datum vergleichen oder dieses Problem zu beheben Problem.

+0

In welchem ​​Format haben Sie das Datum von api empfangen? – MinuMaster

+0

Überprüfen Sie das Datum, das Sie in 'compareDate' übergeben. Es sollte folgendes Format haben: yyyy-MM-dd'T'HH: mm: ss' –

+1

Warum das Casting zu 'NSDate'? Und entweder ist Ihr Dateformat falsch oder Sie müssen das 'Locale' des' DateFormatter' einrichten. –

Antwort

0

Ihre Anwendung wegen Datum Zeichenfolge abstürzt war nicht im selben Format, das zu dateformatter zugewiesen wurde. Wegen dieses Datums gibt das Objekt keinen Wert zurück.

Und Sie zwingen nil Wert zu konvertieren NSDate Objekt. Aus diesem Grund stürzt die App ab.

Sie müssen nur Ihre Methode zu vergleichen, das Datum ändern, wie unten:

func compareDate(date : String) -> Date? { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "MM-dd-yyyy" 
    let dateFromString = dateFormatter.date(from: date) 
    print("datee", dateFromString ?? "") 
    return dateFromString 
} 

Auf diese Weise können Sie können das Date Objekt erstellen.

+0

@Dhruv versuchen Sie diesen Code, es wird zum Erstellen von Datumsobjekt arbeiten, wie Sie Datum im "11-23-2016" -Format erhalten. – MinuMaster

+0

Warum haben Sie diese "Date -> NSDate -> Date" Nonsens Casting behalten? Einfach loswerden. – user28434

+1

Ich aktualisiere diese Methode als deine Anfrage @ user28434. – MinuMaster

0

versuchen dieses Datumsformat dieses

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
dateFormatter.timeZone = NSTimeZone(name: "GMT") 
let date = dateFormatter.dateFromString("2012-12-06 T 06:00:00 ") 

dateFormatter.dateFormat = "yyyy-MM-dd" 
let goodDate = dateFormatter.stringFromDate(date!) 
+0

bro Ich kann diesen Code ausführen lassen goodDate = dateFormatter.string (von: Datum!) Fehler erhalten – Dhruv

+1

Warum verwenden Sie' Foundation' Klassen, wenn sie native Swift-Entsprechungen haben ('DateFormatter' und 'Zeitzone')? –

0

versuchen zu ändern: -

func convertDate(date:String) -> String { 
    let dateFormatter = DateFormatter() 
    let tempLocale = dateFormatter.locale // save locale temporarily 
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") 
    // date format getting from server 
    dateFormatter.dateFormat = "YYYY-MM-dd'T'HH:mm:ss.SSSSSS'Z'" 

    let date = dateFormatter.date(from: date)! 
    //date format you want 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    dateFormatter.locale = tempLocale // reset the locale 
    let dateString = dateFormatter.string(from: date) 
    print("EXACT_DATE : \(dateString)") 
    return dateString 
} 
1

date(from:) gibt eine optionale Date einfach, weil es richtig scheitern kann die angegebene Zeichenfolge zu konvertieren. Da Sie nicht sicher sein können, wenn dies passiert, müssen Sie das Ergebnis nicht erzwingen (dateFormatter.date(from: date)!), sondern das optionale i. e. Verwendung dieses Konstrukts:

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