Wie konvertiere NSDate
ich einen in Unix-Zeitstempel? Ich habe viele Beiträge gelesen, die das Gegenteil tun. Aber ich finde nichts im Zusammenhang mit meiner Frage.
ios
iphone
nsdate
unix-timestamp
neha
quelle
quelle
Ein Unix-Zeitstempel ist die Anzahl der Sekunden seit 00:00:00 UTC am 1. Januar 1970. Er wird durch den Typ time_t dargestellt , bei dem es sich normalerweise um einen vorzeichenbehafteten 32-Bit-Integer-Typ (long oder int) handelt.
iOS bietet - (NSTimeInterval) timeIntervalSince1970 für NSDate-Objekte, das die Anzahl der Sekunden seit 00:00:00 GMT am 1. Januar 1970 zurückgibt. NSTimeInterval ist ein doppelter Gleitkommatyp, sodass Sie die Sekunden und Bruchteile einer Sekunde erhalten.
Da beide dieselbe Referenz haben (Mitternacht, 1. Januar 1970 UTC) und beide in Sekunden sind, ist die Konvertierung einfach. Konvertieren Sie das NSTimeInterval in ein time_t, runden oder kürzen Sie es je nach Ihren Anforderungen:
quelle
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
wopiece.piece.last_view ein NSDate istSie können ein Unix-Zeitstempeldatum aus einem Datum folgendermaßen erstellen:
quelle
HINWEIS: - Der Zeitstempel muss sich in der UTC-Zone befinden. Daher konvertiere ich unsere Ortszeit in die UTC-Zeit.
quelle
Schnell
Aktualisiert für Swift 3
Anmerkungen
timeIntervalSince1970
gibt zurückTimeInterval
, was ein typealias für istDouble
.Wenn Sie in die andere Richtung gehen möchten, können Sie Folgendes tun:
quelle
Wenn Sie diese Zeit in einer Datenbank speichern oder über den Server senden möchten, verwenden Sie am besten Unix-Zeitstempel. Hier ist ein kleiner Ausschnitt, um das zu bekommen:
quelle
[[NSTimeZone systemTimeZone] secondsFromGMT]]
? Bitte erklären Sie wenig.Mein bevorzugter Weg ist einfach:
quelle
Gemäß dem Vorschlag von @ kexik, die UNIX-Zeitfunktion wie folgt zu verwenden:
Nach meiner Erfahrung - verwenden Sie timeIntervalSince1970 nicht, es gibt einen Epochenzeitstempel - Anzahl der Sekunden, die Sie hinter GMT stehen.Früher gab es einen Fehler mit [[NSDate date] timeIntervalSince1970]. Früher wurde die Zeit basierend auf der Zeitzone des Telefons addiert / subtrahiert, aber jetzt scheint sie behoben zu sein.
quelle
erste Unixtime 1532278070
zweite Unixtime 1532278070.461380
dritte Unixtime 1532278070
quelle
Wenn Sie einen Zeitstempel als Zeichenfolge benötigen.
quelle