Horário de verão no Brasil é sempre um problema, porque ele não segue de jeito nenhum a regra mundial. É uma peculiaridade brasileira que causa grandes problemas mesmo para os Administradores de Sistemas que tem que ficar fazendo milagre em relação aos Arquitetos de aplicação
que nunca levam em consideração esta questão.
Hoje comecei com um bruta problema o dia. Várias aplicações Java ( sim, elas ) começaram a ter problemas com o Timezone do servidor aonde estavam hospedados.

Vamos entender. No caso de linguagens compiladas, desde que o Sistema Operacional esteja com o TIMEZONE certo. No caso do Java temos uma JVM no meio, ou seja, um interpretador.
Como a Sun é meio psicótica, ela colocou um Timezone padrão para a sua JVM fugindo da do TImezone do Sistema Operacional. Juntando a isto tudo, que o nosso horário de verão não é padrão, como o do resto do mundo, a zona está pronta.
Pelo menos nos nossos Tomcats aqui, eu resolvi do seguinte modo. Na variavel de shell JAVA_OPTS colocamos o seguinte adendo :
-Duser.timezone=GMT-3
Onde GMT-3 tem que ser o timezone que você vai usar na sua aplicação.
export JAVA_OPTS="-server -Xms512m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=196m -Dcom.sun.management.jmxremote.port=3334 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Duser.timezone=GMT-3"
Ou seja .... com este horário de verão maluco, cada hora temos que descobrir uma coisa nova para fazer em nossos SOs ... no fim, acho que é por isto que os SysAdmins brasileiros acabam sendo bons de serviço ... o governo já começa todo final do ano nos deixando doidos ...