Letny/zimny cas a C-cko

Igor Bujna igor.bujna na maxi-tip.cz
Pondělí Červenec 8 15:13:55 CEST 2002


Marian Stetina wrote:

>On Mon, Jul 08, 2002 at 02:32:54PM +0200, Libor Chocholaty wrote:
>  
>
>>Marian Stetina wrote:
>>
>>    
>>
>>>Dobry ..
>>>Programujem program pod Linux-om, ktory stiahne cez seriovy port presny
>>>cas z GPS prijimaca a nastavi ho ako systemovy. Kedze vsak GPS vracia
>>>UTC cas, je treba pri nastaveni zohladnit casovu zonu a prechod
>>>zimny/letny cas. Casovu zonu mam uz vyriesenu, ale neviem, ako co
>>>najefektivnejsie podla datumu zistit, ci je potrebne pripocitat posun
>>>letneho casu.
>>>Dik za kazdu dobru daru ..
>>>
>>>      
>>>
>>Musite mit seznam zemi, kde se letni cas pouziva a podle toho jej nastavit. Jiny
>>zpusob neznam.
>>
>>Libor
>>    
>>
>
>Nie je problem, ci sa pouziva, ale to, ze ked je UTC cas DD.MM.YYYY, ci treba
>k nemu  pripocitat +1 hodinu alebo nie (stacilo by mi to zovseobecnene
>na Cesko-Slovensko, nepotrebujem, aby to chodilo niekde v Auganistane :-) ).
>
zdravim,
myslim si ze linux pocita s casem GMT.A to tak ze pocita pocet sekund od 
dane epochy, coz je 0:0:0 1.1.1970, nebo tak nejak. A pri nastaveni TZ, 
popripade letniho casu presouva "rucicku" hodin danym smerem. Proto jsou 
v "C" funkce gmtime & localtime. Resil jsem neco podobneho a to u 
implementace funkce dostounix(vraci hodnotu time_t z dosovych struktur 
'date' a 'time'). na linux.
------------------------------------------------------------------------------------------------------------
time_t dostounix (struct date *d, struct time *t)
{
  struct tm utm;
  time_t the_time = time (0);

  memset (&utm, 0, sizeof (struct tm));
  memcpy ((void *) &utm, (void *) localtime (&the_time), sizeof (struct 
tm));

  utm.tm_sec = t->ti_sec;
  utm.tm_min = t->ti_min;
  utm.tm_hour = t->ti_hour;

  utm.tm_mday = d->da_day;
  utm.tm_mon = d->da_mon - 1;
  utm.tm_year = d->da_year - 1900;

  the_time = mktime(&utm);

  memset (&utm, 0, sizeof (struct tm));
  memcpy ((void *) &utm, (void *) localtime (&the_time), sizeof (struct 
tm));
  // Nyni zname spravne nastavene TZ pro dany cas(struct 'date' a 
'time') a muzeme spustit znova

  utm.tm_sec = t->ti_sec;
  utm.tm_min = t->ti_min;
  utm.tm_hour = t->ti_hour;

  utm.tm_mday = d->da_day;
  utm.tm_mon = d->da_mon - 1;
  utm.tm_year = d->da_year - 1900;

  return (mktime (&utm));
}
Nashle




Další informace o konferenci Linux