Abrufen des Unix-Zeitstempels von Date ()

82

Ich kann einen Unix-Zeitstempel in ein Date()Objekt konvertieren, indem ich den longWert in den Date()Konstruktor einsetze. Zum Beispiel: Ich könnte es als haben new Date(1318762128031).

Aber wie kann ich danach den Unix-Zeitstempel vom Date()Objekt zurückbekommen ?

Carven
quelle
Sie können immer noch den langen Wert Ihres Date-Objekts erhalten, nicht wahr?
Kent
@xEnOn: Sie konvertieren keinen Unix-Zeitstempel mithilfe des langen Konstruktors in ein Datum. Ein Unix-Zeitstempel, wie ich die Antwort von Jackrabbit kommentiert habe, wird in Sekunden und nicht in Millisekunden ausgedrückt. Hier: en.wikipedia.org/wiki/Unix_time und hier: unixtimestamp.com/index.php Sekunden. Keine Millisekunden.
TacticalCoder
Mögliches Duplikat von Getting "unixtime" in Java
Eran Medan

Antworten:

90

getTime()Ruft die Millisekunden ab dem 1. Januar 1970 ab, die GMT an den Konstruktor übergeben hat. Es sollte nicht zu schwierig sein, die Unix-Zeit (gleich, aber in Sekunden) daraus zu ermitteln.

Hase
quelle
1
Vielen Dank. Ich erinnerte mich immer wieder falsch daran als statische Funktion Date.getTime (new Date ()), die nicht funktionierte und dachte, was los war.
Carven
47
@jackrabbit: Tatsächlich gibt getTime () nicht den Unix-Zeitstempel zurück, sondern "Unix-Zeitstempel * 1000". Die vereinbarte Definition des Unix-Zeitstempels ist, dass er die Zeiten seit der Epoche in Sekunden und nicht in Millisekunden angibt. )
TacticalCoder
3
@TacticalCoder Jackrabbit ist genauer: Es gibt den Unix-Zeitstempel in Millisekunden zurück. Ja, der Unix-Zeitstempel wird in Sekunden angegeben - aber wenn Ihre Antwort wahr wäre getTime() = unixTimestamp * 1000, getTime()würde ( ) am Ende immer drei Nullen zurückgeben, kann aber tatsächlich alles vom Ende mit 000bis zurückgeben 999, was bedeutet, dass es einen höheren Wert hat Präzision durch Millisekunden und ist nicht nur "* 1000". Bedeutung: Der Vergleich eines echten unixTimestamp * 1000 mit dem getTime()Ergebnis wäre nur in ~ 0,1% der Fälle erfolgreich.
Dognose
Für die Aufzeichnung gibt die Funktion die Millisekunden im GMT-0-Bereich (in Greenwich) zurück. Sie können also sicher sein, dass Sie diese in verschiedene Bereiche konvertieren.
Onat Korucu
45

Um eine timestampaus Date(), müssen Sie teilen getTime()durch 1000, dh:

Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691

oder einfach:

long unixTime = System.currentTimeMillis() / 1000L;
CONvid19
quelle
1
Oder knapper:new Date().getTime()
MarkHu
24
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

public class Timeconversion {
    private DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); //Specify your locale

    public long timeConversion(String time) {
        long unixTime = 0;
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); //Specify your timezone
        try {
            unixTime = dateFormat.parse(time).getTime();
            unixTime = unixTime / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return unixTime;
    }
}
Bhasker
quelle
5

In Java 8 ist es praktisch, die neue Datumsbibliothek und getEpochSecondMethode zu verwenden, um den Zeitstempel abzurufen (in Sekunden).

Instant.now().getEpochSecond();

Wasserwagen
quelle
Aber der präsentierte Code gibt die Anzahl der Sekunden für diesen Moment zurück
Milan Velebit
0

Ich weiß nicht, ob Sie dies in js oder java erreichen möchten. In js ist der einfachste Weg, um den Unix-Zeitstempel zu erhalten (dies ist die Zeit in Sekunden ab dem 1.1.1970), wie folgt:

var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date
elverde
quelle
-1

Verwenden SimpleDateFormatKlasse. Schauen Sie sich das Javadoc an: Es erklärt, wie man Formatschalter verwendet.

AlexR
quelle