Pessoal bom dia, tudo bem ?
Estou trabalhando em um sistema que acabamos de atualizar para o Java 8 e estou mexendo em pontos onde temos a classe date pra usar as classes LocalDate/LocaldateTime mas achei um código que estou com muita dificuldades de ajustar, essa classe tem um método que recebe 2 strings que são data e hora usando timezone da maquina onde está rodando e converte a data para a timezone de Greenwich, mas quando tentava setar a timezone ao invês de reduzir 2 horas da data (rodei o código em uma maquina na nossa timezone no horário de verão) ele está aumentando 2 horas, ex:
correto:
data horario de verão Brasil 12:00
data Greenwich 10:00
resultado que recebi:
data horario de verão Brasil 12:00
data Greenwich 14:00
Segue o código que funciona usando a classe Date e que gostaria de trocar para as classes do java 8:
@Log4j2
public class ConvertStringDate {
private TimeZone timeZoneServidor;
private TimeZone timeZoneGreenwich;
private SimpleDateFormat sdfServidor;
private SimpleDateFormat sdfGreenwich;
private Calendar calendario;
public ConvertStringDate() {
super();
this.timeZoneServidor = TimeZone.getDefault();
this.timeZoneGreenwich = TimeZone.getTimeZone("Greenwich");
this.calendario = Calendar.getInstance();
this.calendario.setTimeZone(timeZoneServidor);
this.sdfServidor = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
this.sdfGreenwich = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
sdfServidor.setTimeZone(timeZoneServidor);
sdfGreenwich.setTimeZone(timeZoneGreenwich);
}
public Date converteStringDataTimeZoneServer(String horaOriginal, String dataATratar) {
String dataHoraFormata = this.obterDataFormatadaGPS(horaOriginal, dataATratar);
Date dataServidor = null;
try {
Date dataGPS = this.sdfGreenwich.parse(dataHoraFormata);
this.calendario.setTime(dataGPS);
dataServidor = calendario.getTime();
log.info(String.format("> Data Hora GPS -> %s | %s <- Data Hora Servidor.", dataHoraFormata, sdfServidor.format(dataServidor)));
}
catch(ParseException e) {
log.error(String.format("Erro ao realizar o parse da data/hora [GPS | Servidor] (%s / %s): %s.", dataHoraFormata, dataServidor, e.toString()));
}
return dataServidor;
}
private String obterDataFormatadaGPS(String horaOriginal, String dataATratar) {
String dataHoraFormata = null;
//obter horario
String hora = horaOriginal.substring(0,2);
String min = horaOriginal.substring(2,4);
String seg = horaOriginal.substring(4,6);
//obter data
// tratamento para nao perder a compatibilidade com o rastreador anterior
if(dataATratar.indexOf(",") > 0) {
dataATratar = dataATratar.substring(dataATratar.indexOf(",") + 1, dataATratar.length());
dataATratar = dataATratar.substring(dataATratar.indexOf(",") + 1, dataATratar.length());
}
String dia = "";
String mes = "";
String ano = "";
//AAAAMMDD
if(dataATratar.length() == 8) {
dia = dataATratar.substring(6,8);
mes = dataATratar.substring(4,6);
ano = "20" + dataATratar.substring(2,4);
}
//DDMMAA
else {
dia = dataATratar.substring(0,2);
mes = dataATratar.substring(2,4);
ano = "20" + dataATratar.substring(4,6);
}
//formado da data - dd/MM/yyyy HH:mm:ss
dataHoraFormata = dia + "/" + mes + "/" + ano + " " + hora + ":" + min + ":" + seg;
return dataHoraFormata;
}
}