[megoldva]Időt kérek gettimeofday

 ( tovis | 2012. március 31., szombat - 16:37 )

Most akkor zavar van az erőben :(
A gettimeofday kitölt egy timezone nevű struktúrát, azaz lesz benne sec és mikrosec klassz. Viszont ez a Greenwich UTC, se idő zóna se téli/nyári korrekció - nekem pedig az kell.
Jó, a gettimeofday kitölt timezone nevű struktúrát is amiben van tz_minutewest és tz_dsttime változó - ez momentán akár jó is lehetne:

tz_minutewest=-120 - azaz GMT +2 (miért is mínusz?)
tz_dsttime=0 - azaz épp nincs téli/nyári korrekció

Valamit azonban ír a glibc kézikönyv, miszerint ez a 4.3 BSD elavult szolgáltatása és használjuk a ... timezone és a daylight nevű változókat, melyeket bármely időkonverziós rutin felinicializál, mire is:

timezone=-3600 - ez csak 1 óra secundumokban
daylight=1 - ?

Hogy lett a GMT +2 -ből GMT +1, a daylight az csak azt mutatja hogy nálunk, van téli/nyári dő, és még meg kell valamit vizsgálni hozzá, hogy kiderítsük épp most van -e.
Na jó. Akkor szerintetek most, hogy kaphatnék lokális pontos időt (mikrosec)?
Ahogy ezt leírtam az jutott eszembe, hogy azt tudom tenni, hogy a gettimeofday -ből csak a mikrosec -t használom, a sec pedig a time rutintól ... ki kell próbálnom :( Nem ez sem jó, ez is Greenich mean time.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

> tz_dsttime=0 - azaz épp nincs téli/nyári korrekció

Nem. Olvasd el újra, mit ír a man:

Idézet:
The tz_dsttime field has never been used under Linux; it has not been and will not be supported by libc or glibc.

The field tz_dsttime contains a symbolic constant (values are given below) that indicates in which part of the year Daylight Saving Time is in force. (Note: its value is constant throughout the year: it does not indicate that DST is in force, it just selects an algorithm.)

> timezone=-3600 - ez csak 1 óra secundumokban

CET == UTC + 1

> daylight=1 - ?

Idézet:
A nonzero value does not necessarily mean that Daylight Saving Time is now in effect; it means only that Daylight Saving Time is sometimes in effect.

A localtime függvénnyel tudsz a time_t típusból helyi időt csinálni. Ez csak másodperces felbontású lesz.

--
Soli Deo Gloria

Viszont a timeval.tv_usec-ben továbbrais benne van a microsecundum, azt nem érinti az időzóna.

Pontosan :D

* Én egy indián vagyok. Minden indián hazudik.

Éreztem hogy kell lennie valami pofonegyszerű megoldásnak, csak nem láttam. A megoldás a localtime(_r) tm struktúra tm_gmtoff eleme hordozza, ugyanis ebben tárolódik az időzónának megfelelően alkalmazott a GMT és a daylight értéke sec :

Idézet:
long int tm_gmtoff
This field describes the time zone that was used to compute this broken-down time value, including any adjustment for daylight saving; it is the number of seconds that you must add to UTC to get local time. You can also think of this as the number of seconds east of UTC. For example, for U.S. Eastern Standard Time, the value is -5*60*60. The tm_gmtoff field is derived from BSD and is a GNU library extension; it is not visible in a strict ISO C environment.

Ennyi, ezt az értéket kell a tv_sec -hez hozzáadni :)
Jó hogy van ez a fórum, szinte biztos vagyok benne, hogy erre már egyszer rájöttem.

* Én egy indián vagyok. Minden indián hazudik.