Como trabalhar com timestamp

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: 1121430566

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

Date hoje = new Date();
hoje.setTime(1121427039);
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.

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

Isso que vc quer ?

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

Rafael

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

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

[quote]Nao eh muito grande nao - eh o numero correto .

Rafael [/quote]

Eu usei php pra obter um timestamp 1121430566
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.

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

1121432979788 / 1121430566 = 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.

[quote=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 / 1121430566 = 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.[/quote]

:shock:

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 :\

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

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

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.

[quote=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[/quote]

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

[/quote]

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: