Problema com Calendar em SO diferentes

4 respostas
yorgan

Bom dia pessoal,
Estou com um problema na utilização do Calendar.
Quando executo no Mac OS a execução retornar valores diferentes de uma execução no Linux.
Obs: Os timezones são os mesmos.

Código teste:

public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		System.out.println(TimeZone.getDefault().getDisplayName());
		System.out.println(cal.getTime());
		cal.set(Calendar.DAY_OF_MONTH, 1);
		System.out.println(cal.getTime());
		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		System.out.println(cal.getTime());
	}

Resultado execução MacOS

Fuso horário de Brasília
Thu Sep 08 08:45:26 BRT 2011
Thu Sep 01 08:45:26 BRT 2011
Sun Sep 04 08:45:26 BRT 2011

Resultado execução Linux

Brasilia Time
Thu Sep 08 08:46:22 BRT 2011
Thu Sep 01 08:46:22 BRT 2011
Sun Aug 28 08:46:22 BRT 2011

Resultado: No MacOS a execução trouxe o Domingo dessa semana, já no Linux veio da semana passada.

Alguma dica?

[]'s
Daniel

4 Respostas

nel

Oi!

Isso me parece mais problema relacionado a configuração de data/hora dos teus SO.
Esse código é para ser totalmente independente de plataforma e deveria obter os mesmos resultados em ambos SO.

Veja se as configurações estão idênticas e tenha certeza de rodar o mesmo código em ambos.
Abraços.

yorgan

Sim, o código é o mesmo. Gerei um jar com o código acima e executei nas duas máquinas.

Mudei o código para trazer todos os params do Timezone:

public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		for(String p : TimeZone.getDefault().toString().split(",")) System.out.println(p);
		System.out.println(cal.getTime());
		cal.set(Calendar.DAY_OF_MONTH, 1);
		System.out.println(cal.getTime());
		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		System.out.println(cal.getTime());
	}

Resultados:
Mac OS:

sun.util.calendar.ZoneInfo[id="America/Sao_Paulo"
offset=-10800000
dstSavings=3600000
useDaylight=true
transitions=129
lastRule=java.util.SimpleTimeZone[id=America/Sao_Paulo
offset=-10800000
dstSavings=3600000
useDaylight=true
startYear=0
startMode=3
startMonth=9
startDay=15
startDayOfWeek=1
startTime=0
startTimeMode=0
endMode=3
endMonth=1
endDay=15
endDayOfWeek=1
endTime=0
endTimeMode=0]]
Thu Sep 08 09:12:53 BRT 2011
Thu Sep 01 09:12:53 BRT 2011
Sun Sep 04 09:12:53 BRT 2011

Linux:

sun.util.calendar.ZoneInfo[id="America/Sao_Paulo"
offset=-10800000
dstSavings=3600000
useDaylight=true
transitions=129
lastRule=java.util.SimpleTimeZone[id=America/Sao_Paulo
offset=-10800000
dstSavings=3600000
useDaylight=true
startYear=0
startMode=3
startMonth=9
startDay=15
startDayOfWeek=1
startTime=0
startTimeMode=0
endMode=3
endMonth=1
endDay=15
endDayOfWeek=1
endTime=0
endTimeMode=0]]
Thu Sep 08 09:13:16 BRT 2011
Thu Sep 01 09:13:16 BRT 2011
Sun Aug 28 09:13:16 BRT 2011
yorgan

Parece que achei a solução.
É o Locale do SO mesmo. Pensei que tinha sido configurado com PT-Br quando configuraram o Timezone, mas não fizeram isso.
Fiz o mesmo teste em um Linux PT-Br e foi.
Agora é descobrir como muda isso.

[]'s
Daniel

nel

yorgan:
Parece que achei a solução.
É o Locale do SO mesmo. Pensei que tinha sido configurado com PT-Br quando configuraram o Timezone, mas não fizeram isso.
Fiz o mesmo teste em um Linux PT-Br e foi.
Agora é descobrir como muda isso.

[]'s
Daniel

Ufa, eu tinha razão, era configuração do SO! rss
Eu já ia começar a ficar em dúvidas em muitas coisas!

Abraços.

Criado 8 de setembro de 2011
Ultima resposta 8 de set. de 2011
Respostas 4
Participantes 2