setTimeInMillis() Não atualiza o Calendar

Ola,

Tenho o seguinte código:

Calendar dta = Calendar.getInstance();
dta.setTimeInMillis(
                                Long.valueOf(
                                     String.valueOf(entryItem[1].getValue())
                                ).longValue()
                              );
lblUltimoPeriodo.setText(meses[dta.get(Calendar.MONTH)] + "/" + String.valueOf(dta.get(Calendar.YEAR)));

Debugando percebi que os valores de dta (todos os campos) permanecem inalterados após a chamada a setTimeInMillis.

Assim meu campo lblUltimoPeriodo fica contendo [quote]Janeiro/1970[/quote]. Alguem sabe porque? Preciso que ele atualize , o valor passado como parâmetro é um long válido que representa [quote]31/12/2002 00:00:00[/quote]

[code]private static int retornaUltDiaMes(String pstrData){

	int intDia = 0;
	
	try { 

		Locale.setDefault(new Locale("pt", "BR"));
		DateFormat dftDataAtual = DateFormat.getDateInstance();
		Date data = dftDataAtual.parse(pstrData);					
		jdtfUltDia.setDate(data);
		intDia = jdtfUltDia.getDateTime().getActualMaximum(Calendar.DAY_OF_MONTH);

	}	
	catch (ParseException pexec){}

	return intDia;
}[/code]

Esse metodo me retorna apenas o valor do ultimo dia do mes encontrado na data.
Usando a Calendar vc formata a data do jeito que voce quer.

Até.

Opa,

Obrigado pelo código, mas meu problema é que preciso setar o Calendar (dta) com o horário que tenho em milisegundos (vindos de um banco de dados, devidamente convertidos para long). O valor long que estou passando é a representação correta da data, mas Calendar não está atualizando seus campos.

Alguma idéia?

Obrigado

Voce tem uma quantidade de milisegundos no banco, recupera isso e quer converter pra data? É isso?
Voce nao tem que ter uma data como base? Ex: 1900 + seus milisegundos = 22/10/2002 12:00:00?

É isso que voce quer fazer?

Pelo que voce fez, o setTimeInMillis ta formatando os mes para Janeiro e nao para 01.

Nao estou entendendo oq voce quer fazer, da uma luz ae e solucionamos.

[]´s

Veja: http://java.sun.com/j2se/1.4.1/docs/api/java/util/Calendar.html#setTimeInMillis(long)

Ele recebe um long representando os milisegundos passados desde Epoch que é definido como January 1, 1970, 00:00:00 GMT … isso é padrão em *nix, é assim que o SO manipula datas e no caso do Oracle é assim que ele armazena.

Ao setar o valor com a função setTimeInMillis() eu esperava que ele assumisse essa data (31/12/2002 00:00:00) para então eu fazer as devidas manipulações (no exemplo quero exibir o Mês/Ano).

Entendeu?

Não estou conseguindo ver porque ele não atualiza, essa função infelizmente não faz um throw nem retorna valor.

o timestamp do java eh diferente de muitos

provavelmente voce precisa multiplicar esse numero que voce esta recebendo por MIL, pq o timestamp do java eh em MILIsegundos, nao em segundos.

poe o numero que ta vindo do BD pra gente ver

:smiley: Pronto!

Realmente foram o MILIsegundos que me pegaram. Multiplicar por mil resolveu.

Obrigado aos dois …