Ottenere il timestamp unix da Date ()


85

Posso convertire un timestamp unix in un Date()oggetto inserendo il longvalore nel Date()costruttore. Ad esempio: potrei averlo come new Date(1318762128031).

Ma dopo di che, come posso recuperare il timestamp unix Date()dall'oggetto?


puoi ancora ottenere il valore lungo del tuo oggetto Date, no?
Kent

@xEnOn: non stai convertendo un timestamp Unix in una data utilizzando il costruttore lungo. Un timestamp Unix, come ho commentato la risposta di jackrabbit, è espresso in secondi, non millisecondi. Qui: en.wikipedia.org/wiki/Unix_time e qui: unixtimestamp.com/index.php Seconds. Non millisecondi.
TacticalCoder

possibile duplicato di Getting "unixtime" in Java
Eran Medan

Risposte:


95

getTime()recupera i millisecondi dal 1 gennaio 1970 GMT passato al costruttore. Non dovrebbe essere troppo difficile ottenere il tempo di Unix (lo stesso, ma in secondi) da quello.


1
Grazie. Continuavo a ricordarlo erroneamente come una funzione statica Date.getTime (new Date ()) che non funzionava e pensavo a cosa stesse succedendo.
Carven

47
@jackrabbit: in realtà getTime () non restituisce il timestamp Unix ma "Unix timestamp * 1000". La definizione concordata sul timestamp di Unix è che fornisce i tempi dall'epoca in secondi, non in millisecondi; )
TacticalCoder

3
@TacticalCoder jackrabbit è più preciso: restituisce unix-timestamp in millisecondi. Sì, il timestamp unix è concordato in secondi, ma se la tua risposta fosse vera, ( getTime() = unixTimestamp * 1000), getTime()restituirebbe sempre tre zeri alla fine, ma in realtà può restituire qualsiasi cosa dalla fine con 000a 999, il che significa che ha un valore più alto precisione dovuta a millisecondi e non è solo "* 1000". Significato: il confronto di un vero unixTimestamp * 1000 con il getTime()risultato avrebbe successo solo nello ~ 0,1% dei casi.
dognose

Per la cronaca, la funzione restituisce i millisecondi nell'area GMT-0 (a Greenwich), quindi puoi essere sicuro di convertirli in aree diverse.
Onat Korucu

50

Per ottenere un timestampda Date(), dovrai dividere getTime()per 1000, ad esempio:

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

o semplicemente:

long unixTime = System.currentTimeMillis() / 1000L;

1
O più new Date().getTime()
concisamente

25
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;
    }
}

6

In java 8, è conveniente utilizzare la nuova libreria data e il getEpochSecondmetodo per ottenere il timestamp (è in secondo)

Instant.now().getEpochSecond();


Ma il codice presentato restituisce il numero di secondi per questo momento
Milan Velebit

Vero, @MilanVelebit. Dovrai sostituire il tuo desiderato Instantinvece di Instant.now(). O yourDesiredJavaUtilDate.toInstant()se hai ottenuto un vecchio stile Dateda un'API legacy.
Ole VV

0

Non so se vuoi ottenerlo in js o java, in js il modo più semplice per ottenere il timestamp unix (questo è il tempo in secondi dall'1 / 1/1970) è il seguente:

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

-1

Usa SimpleDateFormatclasse. Dai un'occhiata al suo javadoc: spiega come usare i cambi di formato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.