Version 2

    horario.jpg

     

    Brincadeiras a parte isso é uma das coisas que podem gerar alguns contratempos em ambientes de produção. Por default o JBoss utiliza hora da JVM que por suas vez asssume os valores configurados no timezone do sistema operacional.

     

    Então ai vai a primeira dica: Deixe o seu timezone configurado corretamente, sei que pode parecer uma coisa bem primária mas já observei alguns ambientes em que simplesmente essas configurações não estavam de acordo com os requisitos necessários. Para informações sobre essa configuração consulte a documentação do seu Sistema Operacional.

     

    A segunda dica é uma ferramenta Oracle que realiza um teste e verifica se o timezone precisa ser atualizado, essa ferramenta se chama Timezone Updater Tool ( tzupdater ), o download pode ser realizado no link abaixo:

     

    http://download.oracle.com/otn-pub/java/tzupdater/1.3.40/tzupdater-1_3_40-2011h.zip

     

    Para utilizar o tzupdater  execute:

     

    java -jar tzupdater.jar -t
    

     

    Serão listadas todas as divergências que podem ocasionar problemas.

     

    Para atualizar execute:

     

    java -jar tzupdater.jar -u
    

     

    Realize o teste novamente, e verifique se foi corrigido.

     

    A terceira e ultima dica é uma classe que a Oracle disponibiliza e que testa se o Java fará as mudanças de horário corretamente. Essa classe pode ser visualizada abaixo:

     

     

    /*
    * Timezone test to check that the new US 2007 DST rules have been
    * picked up by the JRE. TimeZone used is the default one on OS.
    * Sample result :
    * $java DSTTest "11/04/2007 0:00 AM"
    * JRE version : 1.4.2_13
    * Sun Nov 04 00:00:00 EDT 2007
    * TimeZone tested : Eastern Daylight Time
    * Your tested time is in daylight-savings time.
    * $java DSTTest "11/04/2007 3:00 AM"
    * JRE version : 1.4.2_13
    * Sun Nov 04 03:00:00 EST 2007
    * TimeZone tested : Eastern Standard Time
    * Your tested time is not in daylight-savings time.
    * $echo $TZ
    * America/New_York
    *
    */
    
    import java.text.ParsePosition;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimeZone;
    
    public class DSTTest {
     private static final String DATE_FORMAT_PATTERN = "MM/dd/yyyy hh:mm a";
    
     public static void main(String[] args) {
    
     try {
    
       String ver = System.getProperty("java.version");
       String testDate = args[0]; // "11/04/2007 1:00 AM";
    
       SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT_PATTERN);
       Date currentDate = df.parse(testDate, new ParsePosition(0));
       System.out.println("JRE version : " + ver);
       System.out.println(currentDate);
       // Default timezone from the system is used.
       TimeZone tz = TimeZone.getDefault();
       // Could manually set the timezone above. e.g :
       //TimeZone tz = TimeZone.getTimeZone("America/New_York");
       System.out.println("TimeZone tested : " + tz.getDisplayName(tz.inDaylightTime(currentDate), TimeZone.LONG));
       boolean indaylight = tz.inDaylightTime(currentDate);
       System.out.println("Your tested time is " + (indaylight ? "in " : "not in ")  + "daylight-savings time.");
      } catch (Exception e) {
       System.out.println("Error encoutered. Please insure you supply a valid date format pattern.");
       System.out.println("Ensure you've quotes placed around the pattern!");
       System.out.println("e.g java DSTTest \"11/04/2007 1:00 AM\"");
      }
     }
    }
    
    

     

    Para testar compile e execute a classe passando os parâmetros abaixo:

     

    java DSTTest "02/25/2012 10:59 PM"
    java DSTTest "02/26/2012 00:01 AM"
    

     

    Lembrando que o JBoss precisa ser reiniciado na mudança de horário de verão, para assumir as novas configurações.