paulo1205
(usa Ubuntu)
Enviado em 25/02/2014 - 02:22h
fdaniel escreveu:
Pessoal,
Eu tenho a seguinte linha de comando:
tdata = tdata - 24*60*60;
Faço isso para diminuir um dia da minha data, porém, quando é horario de verão eu teria que dividir por 25, por que no dia em que o horario de verão termina o dia tem 25 dias.
Gostaria de saber como eu faço para saber se o timestamp que está variavel está no horário de verão? Tem como eu saber quando é horário de verão e quando não?
Exemplo:
Esse calculo eu faço em um dia que não é mais horário de verão, porém a data que estou convertando é horário de verão. então eu preciso fazer a comparação =
if tdata == horário de verão && pin_virtual_time != horario de verão)
{
tdata = tdata - 25*60*60
}
else
tdata = tdata - 24*60*60;
}
A biblioteca padrão do C define dois tipos de dados relacionados a tempo:
time_t, que é um contador do número de segundos UTC (Coordinated Universal Time) decorridos desde meia noite de primeiro de janeiro de 1970, e
struct tm, que permite decompor os segundos representados do
time_t em ano, mês, dia, hora, minuto, segundo e um indicador de se o horário de verão está ativo ou não.
A função
time() serve para obter a hora corrente.
localtime(),
gmtime(),
mktime() e
timegm() permitem converter de
time_t para
struct tm e vice-versa.
O horário de verão tem dois problemas. Você mencionou somente o caso dos dias com aparentes 25 horas (quando o horário de verão termina), mas existe também o dia de 23 horas, que ocorre no início do horário de verão. No Brasil, no dia em que o horário de verão começa, não existe, por assim dizer, a faixa que vai de 00:00:00 a 00:59:59 do terceiro domingo de outubro. Você deve, então tomar muito cuidado se quiser executar seu programa na meia-noite da segunda-feira seguinte subtraindo 86400 segundos, pois isso lhe devolverá as 23:00:00 do sábado anterior. Já no final do horário de verão, no terceiro domingo de fevereiro, a hora que vai de 23:00:00 a 23:59:59 aparece duas vezes no relógio, de modo que você também deve tomar o devido cuidado.
Minha sugestão: procure centrar suas datas numa hora como 05:00:00. 23:00:00 às 03:00:00 é uma faixa ruim porque no Brasil a hora de verão vira à meia-noite, pegando de uma hora a menos a uma hora a mais; já a faixa 01:00:00 a 03:00:00 também não é legal porque nos EUA o horário de verão vira às 02:00:00. Meio dia é outra opção razoável, até porque a representação juliana usa o meio dia como ponto de partida e de virada, mas saiba que, em alguns países, o meio-dia é, por lei, sempre o momento do sol apino, e costumava existir uma configuração no UNIX para fazer pequenos ajustes diários no relógio por volta de meio-dia para acomodar tal requerimento.