setTimeInMillis() Não atualiza o Calendar

6 respostas
smota

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

Janeiro/1970
. Alguem sabe porque? Preciso que ele atualize , o valor passado como parâmetro é um long válido que representa
31/12/2002 00:00:00

6 Respostas

thiagorani
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;
	}

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é.

smota

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

thiagorani

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

smota

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.

Paulo_Silveira

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

smota

:smiley: Pronto!

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

Obrigado aos dois …

Criado 21 de fevereiro de 2003
Ultima resposta 21 de fev. de 2003
Respostas 6
Participantes 3