Como trabalhar com timestamp

10 respostas
A

Amigos estou com um problema ao trabalhar com timestamp.
Estou tentando recuperar de um banco de dados determinados da dados que foram cadastrados de do mes x até o mes y.
Mas a data de cadastro usa timestamp.
Recuperando o timestamp não estou conseguindo obter a data certa.
vamos tomar por exemplo o seguinte timestamp: [telefone removido]

ae tento visualizar a data com o seguinte código:

Date hoje = new Date();

hoje.setTime[telefone removido]);

System.out.println(hoje.toString());

rodando o código acima isso me retorna:
Tue Jan 13 20:30:27 GMT-03:00 1970

porem o certo deveria ser o timestamp é referente a hoje (dia 15)

Outra coisa:

Date hoje = new Date();

System.out.println(hoje.getTime());

Esse código me retornou 1121432979788, o que eu achava que seria o timestamp porém o número é muito grande.

tentei usar a classe sql.Timestamp e não obtive sucesso tb.

Alguem pode me ensinar como transformar timestamp pra data comum e vice versa? obter mes e tal?

Um grande abraço.

10 Respostas

R
Date result = new Date(rs.getTimestamp(1).getTime());

Isso que vc quer ?

R

Nao eh muito grande nao - eh o numero correto ;).

Rafael

A

Code:
Date result = new Date(rs.getTimestamp(1).getTime());
Isso que vc quer ?

hum, não
fora q o campo na tabela que guarda o timestamp é Int :\

Nao eh muito grande nao - eh o numero correto .

Rafael

Eu usei php pra obter um timestamp [telefone removido]
eo java pra um momento parecido retornou 1121432979788
Queria saber o porquê da diferença :frowning:

Fora que meu problema persiste: Preciso tranformar um timestamp naquilo que eu quiser e fazer tb o processo inverso.

T

Ora, você devia ter desconfiado que os números são parecidos. Divida o valor do java pelo valor que o PHP retornou.

1121432979788 / [telefone removido] = 1000,0021524185920931996426428776

(não é exatamente 1000 porque você não mediu os resultados exatamente ao mesmo tempo :wink: )

Ou seja, você já deve ter se mancado que o Java volta um timestamp que é 1000 vezes maior que o timestamp do PHP. Então é só dividir (ou multiplicar) o valor por 1000 e está tudo OK.

R

thingol:
Ora, você devia ter desconfiado que os números são parecidos. Divida o valor do java pelo valor que o PHP retornou.

1121432979788 / [telefone removido] = 1000,0021524185920931996426428776

(não é exatamente 1000 porque você não mediu os resultados exatamente ao mesmo tempo :wink: )

Ou seja, você já deve ter se mancado que o Java volta um timestamp que é 1000 vezes maior que o timestamp do PHP. Então é só dividir (ou multiplicar) o valor por 1000 e está tudo OK.

:shock:

A

Sim, claro q notei porém:

Date hoje = new Date(1121427039000); <- O java não aceita :frowning:

Diz que o o número é muito grande :\

Ou seja eu sei que o timestamp meu não possui precisão de milisegundos mas mesmo completando com os zeros a maldita classe não aceita :\

R

Eh muito grande para um int, mas nao para um long. Faca assim:

Date hoje = new Date(1121427039000L)

(note o “L”) que ira funcionar.

Rafael

A

não, aquilo ali foi erro na hora que digitei aqui no fórum.
No código está sem o L.

A

Bem, agradeço a força que o pessoal deu mas acabei descolando uma solução:
Multiplico por 1000 meu Timestamp e uso o código abaixo

Long lg = new Long(“1121446542000”);
Date hoje = new Date(lg.longValue());

para o processo inverso uso o método gettime de Date e divido por 1000
vai dar diferença nos seg, mas como só vou usar mes e ano não importa.

R

Rafael Steil:
Eh muito grande para um int, mas nao para um long. Faca assim:

Date hoje = new Date(1121427039000L)

(note o “L”) que ira funcionar.

Rafael

Antropov:
não, aquilo ali foi erro na hora que digitei aqui no fórum.
No código está sem o L.

O que o Rafael Stail quis dizer é que estava faltando o “L”, pra especificar que é um LONG, ou seja um o mesmo que você fez (de outra maneira) depois com:

Criado 15 de julho de 2005
Ultima resposta 15 de jul. de 2005
Respostas 10
Participantes 5