2017-12-06 5 views
0

Ich konvertiere ein Format wie 10/24 12:00 PM in Zeichenfolge auf die Entsprechung in Datumsformat. Ich verwende den folgenden Code:falsche Zeichenfolge zu Datum Konvertierung Swift 3.0

let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "MM/dd hh:mm aa" 

    self.dateCompleted = dateFormatter.date(from: self.DeliverBy!) 

dateCompleted ist eine Date-Variable, während self.DeliveryBy eine String-Variable ist.

Ich bekomme eine Ausgabe wie 2000-10-24 17:00:00 UTC wo es so etwas wie 2017-10-24 12:00:00 UTC sein sollte. Mache ich etwas falsch?

I bezeichnet http://userguide.icu-project.org/formatparse/datetime

+1

'DateFormatter' übernimmt Ortszeit, sofern nichts anderes gesagt. Wenn man also 17:00:00 UTC sieht, ist es sinnvoll anzunehmen, dass man in EST lebt (UTC -5). – rmaddy

Antwort

2

Ihr Datum Zeichenfolge kein Jahr angegeben, die er wird deshalb vom Standarddatum bestimmt. Was Sie tun können, ist die Standarddatum auf dem (Beginn der) aktuellen Tag ein:

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "MM/dd hh:mm aa" 
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date()) 
if let dateCompleted = dateFormatter.date(from: "10/24 12:00 PM") { 
    print(dateCompleted) // 2017-10-24 10:00:00 +0000 
} 

(Ich bin in der Region Europa/Berlin Zeitzone wird daher 12.00 als 10 gedruckt: 00 GMT)

+0

2017-10-24 17:00:00 +0000 Ich bekomme immer noch falsche Zeitstempel – Ackman

+0

@Ackman: Beachten Sie, dass ein Datum keine Zeitzone hat und immer in GMT gedruckt wird. "12:00 PM" in Ihrer Zeitzone ist 17:00 in der GMT-Zeitzone, das Ergebnis ist also korrekt. Siehe auch https://stackoverflow.com/questions/39937019/nsdate-or-date-shows-the-wrong-time. –

0

Sie können das aktuelle Datum Info in die DateFormatter laden.

let dateFormatter = DateFormatter() 

dateFormatter.dateFormat = "MM/dd hh:mm aa" 

dateFormatter.defaultDate = Date() // start with the current date 

self.dateCompleted = dateFormatter.date(from: self.DeliverBy!) 
+0

10/24 12:00 PM -----> Lieferungvon 2017-10-24 17:00:56 +0000 -----> dateCompleted warum gibt es einen Zeitunterschied? – Ackman