2016-10-31 6 views
0

Ich habe einen double Wert Zeitstempel 1477933200000.0 von einem JSON, und ich möchte in NSDate dann string konvertieren. Das, was ich tat,Zeitstempel in NSDate konvertieren

let dateNow = NSDate(timeIntervalSinceNow: timestampDouble) 
let date1970 = NSDate(timeIntervalSince1970: timestampDouble) 
let dateRef = NSDate(timeIntervalSinceReferenceDate: timestampDouble) 

let dateFormatter = NSDateFormatter() 
// dateFormatter.dateFormat = "MM/dd/YYYY HH:MM:ss a" 
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle 
dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle 

let convDateNow = dateFormatter.stringFromDate(dateNow) 
print("Date Now: \(convDateNow)") 

let convDate1970 = dateFormatter.stringFromDate(date1970) 
print("Date Now: \(convDate1970)") 

let convRefDate = dateFormatter.stringFromDate(dateRef) 
print("Date Now: \(convRefDate)") 

Ich versuchte es in http://www.epochconverter.com zu konvertieren und es zeigte mir das richtige Datum. Aber alle drei Typen (timeIntervalSinceNow, timeIntervalSince1970 und timeIntervalSinceReferenceDate) sind seltsam. Dies ist das Ergebnis von diesem Typ.

Date Now: September 2, 48850 at 5:50:04 PM 
Date Now: November 3, 48803 at 3:00:00 PM 
Date Now: November 3, 48834 at 3:00:00 PM 

Also, was mache ich hier falsch? Ich möchte nur den Unterschied zwischen Datum jetzt und dem Datum von Json (Zeitstempel) bekommen.

Jede Hilfe würde wirklich geschätzt werden. Vielen Dank!

Antwort

1

Beachten Sie, dass, wenn Sie epochconverter.com verwenden, eine Meldung angezeigt wird, die besagt "Angenommen, dieser Zeitstempel ist in Millisekunden".

Versuchen Sie nun, die drei abschließenden Nullen (links vom Dezimaltrennzeichen) zu entfernen. Es wird jetzt davon ausgegangen, dass Sie mit Sekunden zu tun haben und es Ihnen das gleiche Datum gibt & Zeit.

In iOS wird NSTimeInterval (oder TimeInterval in Swift) tatsächlich als Double (oder Double) typedef definiert, aber es wird als Sekunden interpretiert (mit einer Genauigkeit im Millisekundenbereich). Daher erwarten die verschiedenen NSDate() - Konstruktorüberladungen, dass der Parameter in Sekunden ausgedrückt wird.

Sie müssen also diesen Zeitstempel möglicherweise durch 1000 teilen, um von Millisekunden zu Sekunden zu konvertieren.

+0

Vielen Dank. Ich habe mit 1000 geteilt und benutze 'timeIntervalSince1970' und es funktioniert. –