sziasztok
szeretnem az aktualis idot kimenteni egy valtozoba, hogy az 0-86400.00 -ig terjedjen. (ami24*60*60)
a timeGetTime nem jo, mert DWORD erteket ad vissza ami 2ad32, ami kb 49.71 napos
ciklusidot jelent.
tud valaki segiteni?
- 1819 megtekintés
Hozzászólások
#include
unsigned int sec;
...
sec = time(NULL) % 86400;
...
- A hozzászóláshoz be kell jelentkezni
ok, csak ugy szeretnem hogy a szam az ejfeltol eltelt masodperceket/szazadmasodperceket reprezentalja
- A hozzászóláshoz be kell jelentkezni
A fenti programban az éjféltől eltelt másodperceket kapod a sec változóban.
Ha századmásodpercek is kellenek akkor:
#include
unsigned int sec, sec_100;
struct timeval t;
...
gettimeofday(&t,NULL);
sec = t.tv_sec % 86400;
sec_100 = (t.tv_usec+5000) / 10000;
...
- A hozzászóláshoz be kell jelentkezni
Az első példában time.h, a másodikban sys/time.h szerepel az include-ban.
- A hozzászóláshoz be kell jelentkezni
sec = t.tv_sec % 86400;
sec_100 = (t.tv_usec+5000) / 10000;
Spot the bug! :-)
- A hozzászóláshoz be kell jelentkezni
Most elbizonytalanítottál, ezért kipróbáltam. Szerintem jó.
- A hozzászóláshoz be kell jelentkezni
Átlagosan 200-ból 199-szer jó.
- A hozzászóláshoz be kell jelentkezni
Szerintem ez pont ezt adja vissza mp-ben, ha a géped órája (BIOS-ban) helyi idő szerint jár. Ha UTC szerint megy, akkor +3600 mp.
-----
Dropbox tárhely igénylése: https://www.getdropbox.com/referrals/NTI2MzM2MjA5
- A hozzászóláshoz be kell jelentkezni
BIOS óra időzónájától ez teljesen független. A time() és a gettimeofday() egyaránt az 1970 jan. 1 0:00 UTC óta eltelt (nem szökő) másodpercek számát adja vissza, amit modulo 86400 nézve megkapod az UTC időzóna szerint éjfél óta eltelt másodperceket. Ha helyi idő érdekel, irány a localtime() függvény, ami az előbbi értéket szétdarabolja neked év-hónap-nap-óra-perc-stb. mezőkre.
- A hozzászóláshoz be kell jelentkezni
És ha a BIOS-t helyi időre állítod be, akkor a helyi időt hiszi UTC-nek.
-----
Dropbox tárhely igénylése: https://www.getdropbox.com/referrals/NTI2MzM2MjA5
- A hozzászóláshoz be kell jelentkezni
A bios időt lehet helyi időre is, meg UTC-re is állítani. A rendszer boot szkriptjei a bios idő alapján állítják be a rendszer idejét, a bios idejét valami konfig fájl alapján vagy helyi időként, vagy UTC-ként értelmezve. Ergó lehet kétféle jó és kétféle rossz beállítást produkálni. Feltételezem, hogy a rendszer jól van beállítva - egyéb esetben ugyanis semmit sem lehet tudni arról, hogy ezek a függvények mit is adnak vissza. Ebben az esetben pedig teljesen lényegtelen, hogy a biosban milyen időzóna van.
- A hozzászóláshoz be kell jelentkezni
Debianban a /etc/default/rcS fájlban lehet kérni, hogy a hardveróra UTC-ben ketyegjen, ami jó ötlet, kivéve, ha Windows-t is bootol az a gép.
- A hozzászóláshoz be kell jelentkezni
Egyébként... mi az a timeGetTime? És mi az a dword? :)
Lehetséges, hogy itt a Hungarian Unix Portalon elfelejtetted megemlíteni, hogy kérdésed nem Unixra vonatkozik? Vagy én vagyok tök hülye?
- A hozzászóláshoz be kell jelentkezni
igazad van, bocsi
kozben meglett a megoldasom, kosz a valaszokat
megoldasom:
...
SYSTEMTIME st;
GetSystemTime(&st);
double timestamp;
timestamp = 60*60*(st.wHour+1)+60*(st.wMinute)+st.wSecond+0.01*(st.wMilliseconds/10);
....
az ora erteket gondolom BIOS szerint veszi, mivel egy oraval kevesebbet ad a mostani idonel,
ezert van ott a +1.
Es szazad masodpercekig valo felbontasra volt szuksegem, azert van a milisec alakitva.
- A hozzászóláshoz be kell jelentkezni
Nem a BIOS-ból szedi, hanem saját órája ketyeg. A +1-et pedig csak úgy odabiggyeszteni, mert így működik... hát... aztán majd csodálkozol tavasszal amikor hirtelen már nem működik jól a progid...
... szerk: arról nem is beszélve, hogy az a +1 miatt nem is a 0..86399 intervallumban kapod meg az értéket!
- A hozzászóláshoz be kell jelentkezni
csak egy par meres erejeig kell a dolog, egyebkent meg le lehet kezelni azt is nem nagy erofeszitessel..de azert kosz a valaszert
- A hozzászóláshoz be kell jelentkezni
Nem az erofeszitesrol, hanem a hozzaallasrol van szo. Velem nagyon sokszor elofordul, hogy regi kodreszleteket hasznositok ujra, amelyeknel igazabol mar fogalmam sincs, hogy hogy mukodnek. Egy ilyen "agyondokumentalt" (ironia) kod kesz remalom tud lenni, ha valami hiba itt jelzodik ki.
En ilyen esetben legalabbis azt csinalnam, hogy csinalnek egy tcorr valtozot, abba mentenem le az 1-et, es melle kommentbe odairnam, hogy "TODO: investigate why it needed". Igy tudni fogom, hogy ez egy ilyen misztikus 1-es, mert csak.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Ebben az a jó, hogy aki majd utánad újraírja ezt a kódot, az tuti fogni fogja a fejét, hogy ez meg mi :-)
- A hozzászóláshoz be kell jelentkezni
Addigra mar ki szoktam fixalni az ilyent. En nem irok ilyeneket csak akkor, ha idoszuke van, es nekem a IDE alul kijelzi a TODO kommenteket.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Dehat van GetLocalTime() fuggveny is.
Illetve ezt is erdemes elolvasni:
http://blogs.msdn.com/oldnewthing/archive/2005/09/02/459952.aspx
- A hozzászóláshoz be kell jelentkezni
Annyit hozzátennék, hogy a UTC / 86400 osztás maradéka nem feltétlenül adja ki az adott napi másodperc értéket, mert a Föld fordásidejének ingadozása miatt néha beiktatnak egy plusz vagy minusz másodpercet a rendszerbe.
A biztos megoldás az, ha valami dátumparszoló libet használsz, ami UTC-t dátumra konvertál, és abból olvasod ki a napi másodperc értéket. Ez a jövőben bevezetett korricációs másodperceket is kezelni fogja automatikusan, ha az lejön a gépre update formájában.
- A hozzászóláshoz be kell jelentkezni
Windowsról nem tudok nyilatkozni, Posix szabvány szerint, akár tetszik, akár nem, az időt a szökőmásodperc figyelmen kívül hagyásával mérjük. Tehát Linux alatt például a 86400-zal osztás (sajnos? szerencsére? ki-ki döntse el maga) jól működik.
Egyébként eddig huszon-egynéhány plusz másodperc volt, és mínusz egy sem.
- A hozzászóláshoz be kell jelentkezni
+1
sőt, legszebb az lenne, ha API-szinten két különböző funkció lenne arra, hogy
- aktuális időt lekérdezzünk
- megadott időtartam múlva eseményt kapjunk
Lehet, hogy van is, most nincs időm utánanézni. :)
A másodiknak működnie kell függetlenül attól, hogy
- közben valaki átállította a rendszeridőt
- közben szökőmásodperc volt
- közben másik időzónába léptünk
- közben téli-nyári váltás volt
Sőt, az se baj, ha a rendszer két külön módszerrel méri az időt.
Szerk: az UTC használata a 4 pontból a 3. és 4. pontokat megoldja, de az első kettőt nem.
- A hozzászóláshoz be kell jelentkezni
Linuxban van ilyen "monotonic" óra, és tudtommal minden értelmes függvény ami várakozik az ezt használja, tehát nem érzékeny a rendszeróra átállítására. Gyakorlatilag a bootolás óta eltelt számolja, vagy valami ilyesmi. Lásd például a clock_gettime() kézikönyvet.
- A hozzászóláshoz be kell jelentkezni