Truncar data com Calendar - Horário de Verão

2 respostas
java
E

Olá,

Estou com o problema em datas após o horário de verão.

Estou querendo zerar os campos de horas, porém somente o campo de hora sempre fica com valor 01 ao invés de 0.

Exemplo

public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-3"));        
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        System.out.println(new SimpleDateFormat("dd/MM/yyyy hh:mm:ss ").format(calendar.getTime()) + calendar.getTimeZone().getDisplayName());
    }

Saída

17/10/2016 01:00:00 GMT-03:00

O que preciso

17/10/2016 00:00:00 GMT-03:00

2 Respostas

P

vejamos

timezone diz respeito a qual “meridiano” vc esta. assim cidades nos dois hemisferios podem pertencer a um mesmo timezone. assim GMT-3 é generico e não da nenhuma informação sobre o famoso daylight saving.

vc precisa pegar o time zone da região em particular ( que la dentro ele se ajeita )

TimeZone zone = TimeZone.getTimeZone("America/Sao_Paulo");
DateFormat format = DateFormat.getDateTimeInstance();
format.setTimeZone(zone);

na duvida, imprima quais os timezones disponiveis com TimeZone.getAvailableIDs()

E

peczenyj obrigado pela resposta.

Mas deixando o TimaZone como America/Sao_Paulo a hora ficou da seguinte forma:

17/10/2016 12:00:00 Fuso horário de Brasília

Deixando como GMT-3 ficou do mesmo jeito

17/10/2016 01:00:00 GMT-03:00

Código

public static void main(String[] args) {
        TimeZone zone = TimeZone.getTimeZone("GMT-3");
        DateFormat format = DateFormat.getDateTimeInstance();
        format.setTimeZone(zone);        
        
        Calendar calendar = format.getCalendar();
        calendar.setTime(new Date());
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        System.out.println(new SimpleDateFormat("dd/MM/yyyy hh:mm:ss ").format(calendar.getTime()) + calendar.getTimeZone().getDisplayName());
    }
Criado 17 de outubro de 2016
Ultima resposta 17 de out. de 2016
Respostas 2
Participantes 2