Obtendo carimbo de data / hora unix de Date ()

85

Posso converter um carimbo de data / hora Unix em um Date()objeto, colocando o longvalor no Date()construtor. Por exemplo: eu poderia ter como new Date(1318762128031).

Mas depois disso, como posso recuperar o carimbo de data / hora Unix do Date()objeto?

Carven
fonte
você ainda pode obter o valor longo do seu objeto Date, não é?
Kent,
@xEnOn: você não está convertendo um carimbo de data / hora Unix em uma data usando o construtor longo. Um carimbo de data / hora Unix, como comentei na resposta do coelho, é expresso em segundos, não milissegundos. Aqui: en.wikipedia.org/wiki/Unix_time e aqui: unixtimestamp.com/index.php Segundos. Não milissegundos.
TacticalCoder
possível duplicata de Getting "unixtime" em Java
Eran Medan

Respostas:

95

getTime()recupera os milissegundos desde 1º de janeiro de 1970 GMT passado para o construtor. Não deve ser muito difícil obter o tempo Unix (o mesmo, mas em segundos) a partir daí.

coelho
fonte
1
Obrigado. Continuei me lembrando disso erroneamente como uma função estática Date.getTime (new Date ()) que não funcionava e pensei no que estava acontecendo.
Carven,
47
@jackrabbit: na verdade getTime () não retorna o timestamp Unix, mas "Unix timestamp * 1000". A definição acordada sobre o carimbo de data / hora Unix é que ele fornece tempos desde a época em segundos, não em milissegundos; )
TacticalCoder
3
O jackrabbit @TacticalCoder é mais preciso: ele retorna o carimbo de data / hora unix em milissegundos. Sim, o unix-timestamp é concordou em ser em segundos -, mas se a sua resposta seria verdade, ( getTime() = unixTimestamp * 1000), getTime()sempre retornava três Zeros no final, mas na verdade pode retornar nada de acabar com 000a 999, o que significa que tem um maior precisão devido a milissegundos e não é apenas "* 1000". Significado: Comparar um unixTimestamp * 1000 real com o getTime()resultado só teria sucesso em ~ 0,1% dos casos.
dognose
Para registro, a função retorna os milissegundos na área GMT-0 (em Greenwich), portanto, você pode estar seguro ao converter isso para áreas diferentes.
Onat Korucu
50

Para obter um timestampde Date(), você precisará dividir getTime()por 1000, ou seja:

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

ou simplesmente:

long unixTime = System.currentTimeMillis() / 1000L;
Pedro Lobito
fonte
1
Ou mais new Date().getTime()
conciso
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
fonte
6

No java 8, é conveniente usar a nova biblioteca de data e getEpochSecondmétodo para obter o carimbo de data / hora (está em segundo)

Instant.now().getEpochSecond();

carro d'água
fonte
Mas o código apresentado retorna o número de segundos para este momento
Milan Velebit
É verdade, @MilanVelebit. Você terá que substituir o desejado em Instantvez de Instant.now(). Ou yourDesiredJavaUtilDate.toInstant()se você obteve uma DateAPI antiquada de uma legada.
Ole VV
0

Não sei se você deseja fazer isso em js ou java, em js a maneira mais simples de obter o timestampt unix (este é o tempo em segundos de 01/01/1970) é o seguinte:

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

Use a SimpleDateFormatclasse. Dê uma olhada em seu javadoc: ele explica como usar as opções de formato.

AlexR
fonte