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