Obtener la marca de tiempo de Unix de Date ()

85

Puedo convertir una marca de tiempo de Unix en un Date()objeto poniendo el longvalor en el Date()constructor. Por ejemplo: podría tenerlo como new Date(1318762128031).

Pero después de eso, ¿cómo puedo recuperar la marca de tiempo de Unix del Date()objeto?

Carven
fuente
todavía puede obtener el valor largo de su objeto Date, ¿no?
Kent
@xEnOn: no está convirtiendo una marca de tiempo de Unix en una fecha usando el constructor largo. Una marca de tiempo de Unix, como comenté en la respuesta de jackrabbit, se expresa en segundos, no en milisegundos. Aquí: en.wikipedia.org/wiki/Unix_time y aquí: unixtimestamp.com/index.php Seconds. No milisegundos.
TacticalCoder
posible duplicado de Obtener "unixtime" en Java
Eran Medan

Respuestas:

93

getTime()recupera los milisegundos desde que el 1 de enero de 1970 GMT pasó al constructor. No debería ser demasiado difícil obtener el tiempo Unix (el mismo, pero en segundos) a partir de eso.

liebre
fuente
1
Gracias. Seguí recordándolo incorrectamente como una función estática Date.getTime (new Date ()) que no funcionó y pensó lo que estaba pasando.
Carven
47
@jackrabbit: en realidad getTime () no devuelve la marca de tiempo de Unix sino "marca de tiempo de Unix * 1000". La definición acordada sobre la marca de tiempo de Unix es que da los tiempos desde la época en segundos, no en milisegundos; )
TacticalCoder
3
@TacticalCoder jackrabbit es más preciso: devuelve la marca de tiempo de Unix en milisegundos. Sí, se acuerda que la marca de tiempo de Unix sea en segundos, pero si su respuesta fuera verdadera, ( getTime() = unixTimestamp * 1000), getTime()siempre devolvería tres ceros al final, pero de hecho puede devolver cualquier cosa desde que termine con 000hasta 999, lo que significa que tiene una mayor precisión debido a milisegundos y no es solo "* 1000". Significado: comparar un unixTimestamp * 1000 real con el getTime()resultado solo tendría éxito en ~ 0.1% de los casos.
dognose
Para el registro, la función devuelve milisegundos en el área GMT-0 (en Greenwich), por lo que puede estar seguro de convertir esto en diferentes áreas.
Onat Korucu
50

Para obtener un timestampde Date(), deberá dividir getTime()por 1000, es decir:

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

o simplemente:

long unixTime = System.currentTimeMillis() / 1000L;
Pedro Lobito
fuente
1
O más new Date().getTime()
brevemente
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;
    }
}
bhasker
fuente
6

En java 8, es conveniente usar la nueva biblioteca de fecha y el getEpochSecondmétodo para obtener la marca de tiempo (está en segundo lugar)

Instant.now().getEpochSecond();

watercar
fuente
Pero el código presentado devuelve el número de segundos para este momento
Milan Velebit
Es cierto, @MilanVelebit. Tendrá que sustituir su deseado en Instantlugar de Instant.now(). O yourDesiredJavaUtilDate.toInstant()si tiene una DateAPI antigua .
Ole VV
0

No sé si desea lograr eso en js o java, en js la forma más sencilla de obtener la marca de tiempo de Unix (este es el tiempo en segundos desde el 1/1/1970) es la siguiente:

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

Usa SimpleDateFormatclase. Eche un vistazo a su javadoc: explica cómo usar conmutadores de formato.

AlexR
fuente