Horário de Verão

2 respostas
JML

Estou com um problema, e gostaria de saber se vc pd me ajudar.

Estou desenvolvendo um sistema para Windows Mobile e utilizo a JVM livre Mysaifu.

Acontece que, após a mudança no horário de verão a hora gravada não corresponde mais a mostrada no display do pda, pegando sempre a data normal anterior a hora de verão.

A forma como recupero a hora mostro no código abaixo:

public void salvarEntrada(String cracha) {
        PreparedStatement pstmt;
        ResultSet rs = null;
        try {
        
            TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo");   
            TimeZone.setDefault(tz);   
            Calendar ca = GregorianCalendar.getInstance(tz);   
            SimpleDateFormat horaInicial = new SimpleDateFormat("HH:mm");   
            
             pstmt = Conexao.getInstance().getConnection().prepareStatement("update turma set hentrada = ?  where numero = ?");
    
            String numero = cracha.substring(0 , 2);
            pstmt.setString(1,horaInicial.format(ca.getTime()));            
            pstmt.setString(2 , numero);
            pstmt.executeUpdate();
            
            Conexao.getInstance().getConnection().commit();   
        }

Tentei utilizar algo como o código abaixo para tentar resolver, mais não deu certo, o Mysaifu não possui a classe ZoneInfoFile:

package br.com.fitsistemas.horario;

import java.lang.reflect.Field;

import java.util.Date;

import java.util.TimeZone;

import sun.util.calendar.ZoneInfoFile;

public class HorarioVerao {

public static void main(String[] args) {


Field field;

try {

// aqui utilizo reflection para conseguir acessar e alterar um

// atributo privado

field = ZoneInfoFile.class.getDeclaredField("zoneInfoObjects");

field.setAccessible(true);

// esse ? um atributo static, que corresponde a uma Collection que ?


// ent?o "apagamos" o cache :-)

field.set(null, null);


// default (obtido atrav?s do S.O.)

TimeZone.setDefault(null);


// "truque" n?o ir? funcionar




System.out.println(new Date());




} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}




}

Por favor se vcs puder me ajudar ficarei muito grato.

Obrigado

Maurício

2 Respostas

G

Inicie sua JVM com o parâmetro: java -Duser.timezone=GMT-2:00

Quando o horário de verão acabar, mude para GMT-3 ou retire o parâmetro.

JML

obrigado pela resposta, mas dessa forma não irá ser viavel pra mim, pois o sistema roda em diversas fazendas, um numero de + ou - 200 pdas e ter que refazer toda vez que inicia e termina o horário de verão todo ano fica complicado dar esta manutenção.

Se vcs tiverem outra solução, agradeço

Maurício

Criado 23 de outubro de 2009
Ultima resposta 23 de out. de 2009
Respostas 2
Participantes 2