Zerando timestamp

1. Zerando timestamp

Felipe Moreira Daniel
fdaniel

(usa Ubuntu)

Enviado em 24/02/2014 - 15:13h

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;
}








  


2. Re: Zerando timestamp

Paulo
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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts