time_t

Kezdőlap Fórumok Programozás time_t

10 bejegyzés megtekintése - 1-10 / 19
  • Szerző
    Bejegyzés
  • #2066745
    goraki
    Felhasználó

      A Unixok az idõt 1970. 01. 01 óta eltelt másodpercekben mérik(timestamp/idõbélyeg). Valószínûleg ezért nem úgy megy, ahogy szeretnéd. Sajnos jobbat nem tudok mondani.

      #2066746
      lacix
      Felhasználó

        Igen, de a localtime megy kb. 1902-tõl, negatív time_t-vel, ahogy az a példában is látszik, de a konverzió visszafele mktime-mal nem megy. Ezért furcsálom az mktime mûködését 1970 elõtt.

        #2066747
        lacix
        Felhasználó

          Hello!

          Debian Sarge hiba, nem tudom, hogy más rendszereket érint-e.
          http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=196177
          Az mktime rossz, kipróbáltam máshol is és ott rendsesen megy (a példaprogram 1. és utolsó sora megegyezik), tehát az mktime mûködik 1970 elõtti évekre is.

          Továbbra is érdekelne vmi normális módszer a time_t korlátai miatt.

          #2066748
          pointux
          Felhasználó

            „Továbbra is érdekelne vmi normális módszer a time_t korlátai miatt.”
            A time_t struktúrának csak az int korlátai a korlátai tehát +-2^4/2 között tudja az idõt tárolni, noha a dátumot kezelõ fuggvény úgy van megoldva, hogy 1900-tól számol csak… akármeddig. (De nem is a történelemre, hanem a „számítógépes idõre” találták ki.)
            Tehát a struktúrán nem kell változtatni… max a függvényeken. De, ha pl. 0-tól akarod mérni az évet – ezzel, mert nincs kedved más megoldást keresni – akkor egy +/–szal megoldható. Ha kijön pl. 1901, akkor = 1901-1=1, ha viszont az 1-es évet akarod kijelölni, akkor 1+1900-at kell megadnod.

            Bár én inkább hagynám ezt a másodperces bohóckodást, mert ez nem arra való, amit te akarsz csinálni. Inkább az öröknaptárakban keresgetnék… az tetszõleges idõre meg tudja határozni, még a szökõéveket, hét napjait stb. Papíron már csináltam ilyet, csak mióta számítógépem van, azóta erre nincs szükség. (Na erre írnék egy kis függvényt. Meg szerintem van is.) A time_t struktúrát magát egyébként lehet használni… még a kõkorszakra is, úgyhogy :)))…

            Bár, ha a másodperces kell, akkor sincs semmi akadálya. Ott a forrás… kiveszed az 1900-as eltolást, megváltoztatod a tároló méretét… minden más marad változatlan.

            #2066749
            lacix
            Felhasználó
              #2066750
              pointux
              Felhasználó

                „egy dátumot megkapjak másodpercben”
                Nem tudom, hogy minek ilyesmi, de te tudod.

                „nincs kedvem bohóckodni szökõévekkel”
                A szökõéveket meg azért mondtam, hogy figyelni kell arra is…mondjuk nagy cucc 4 évente egy nap figyelembe vétele. Ha ez bohóckodás, akkor rendben – bár szerintem a time is bohóckodik vele – (bár szerintem meg a másodperces az… elvégre kinek fontos a mp 100 év alatt).
                Az öröknaptárat meg azért emlegettem, mert az azt is tudja, hogy a hét melyik napja van. (Bár ez a héttel való szorozgatás is nagy cucc…persze, csak, ha szükség van rá.)
                Ismétlem a másodpercezgetést nem arra találták ki, hogy te átfogjál vele több száz évet… ez a mûködõ számítógépek, aktuális nyílvántartási adatbázis (file-dátum stb.) miatt van, arra gondolván, hogy az ember ált. nem él 100 évig és fõként nem használja ugyanazt a partíciót annyi ideig… nem azért, hogy ilyeneket számolgass vele.

                „64 bites rendszeren milyen a time_t?”

                #2066751
                lacix
                Felhasználó

                  „Nem tudom, hogy minek ilyesmi, de te tudod.”

                  Egy dátumhoz úgy adok hozzá x másodpercet, hogy átkonvertálom time_t-re mktime-mal, hozzáadok x-et és visszakonvertálom év, dátum, … formába localtime-mal. Ez egy jó egyszerû megoldás.

                  De egy másik „értelmesebb” felhasználási mód, hogy a dátumot delphis tdatetime formábán kell tárolnom. Na és itt nem csak hozzáadnom kell a másodpercekhez.

                  „A szökõéveket meg azért mondtam, hogy figyelni kell arra is…mondjuk nagy cucc 4 évente egy nap figyelembe vétele. Ha ez bohóckodás, akkor rendben – bár szerintem a time is bohóckodik vele – (bár szerintem meg a másodperces az… elvégre kinek fontos a mp 100 év alatt).”

                  Persze, meg még emelett ha az év 100-al osztható, akkor nincs szökõév, de kivéve, ha 400-al is osztható, akkor megint van. 2000 szökõév volt. Ez már bohóckodás. Szeretem, ha egy fgv. megcsinálja helyettem a piszkos munkát. 🙂

                  „Az öröknaptárat meg azért emlegettem, mert az azt is tudja, hogy a hét melyik napja van. (Bár ez a héttel való szorozgatás is nagy cucc…persze, csak, ha szükség van rá.)”

                  Az nem fontos, hogy a hét melyik napja.

                  „Ismétlem a másodpercezgetést nem arra találták ki, hogy te átfogjál vele több száz évet… ez a mûködõ számítógépek, aktuális nyílvántartási adatbázis (file-dátum stb.) miatt van, arra gondolván, hogy az ember ált. nem él 100 évig és fõként nem használja ugyanazt a partíciót annyi ideig… nem azért, hogy ilyeneket számolgass vele.”

                  Ezért írtam, hogy nem létfontosságú, így is el vagyok vele.

                  #2066752
                  pointux
                  Felhasználó

                    „Ez még is, hogy kb. 4 milliárd év?”
                    Amúgy igazad van… menéztem a includban… ezzel kevertem (Nem csoda, hisz „normális ember” nem fog 20484966 mp-ben számolni, amikor tud x év y hónap… formában is. Ehhez meg ugyanúgy hozzá lehet adni egy mp-et.):
                    struct tm {
                        int tm_sec;        seconds after the minute (from 0)
                        int tm_min;        minutes after the hour (from 0)
                        int tm_hour;       hour of the day (from 0)
                        int tm_mday;       day of the month (from 1)
                        int tm_mon;        month of the year (from 0)
                        int tm_year;       years since 1900 (from 0)
                        int tm_wday;       days since Sunday (from 0)
                        int tm_yday;       day of the year (from 0)
                        int tm_isdst;      Daylight Saving Time flag
                        };

                    (az már csak a mp-es bizgentyû…)

                    „Mint írtam long int, és nem vagyok biztos benne, hogy 64 bit alatt is 4 byte-os.”
                    Hogy ne lenne az. Egyébként a fordítótól függ long int (talán mindig 32 bites). Pl. az int gcc alatt = long int (32 bit)(bármelyik cpu-n), amíg pl. borland alatt az int = short int (16 bit).
                    Viszont nem gondolod, hogy a kompatibilitás kedvéért:) olyan „szabványos” programot írnak, ami más-más cpu-n más-másként viselkedik. (Hacsak nem feltétle kell… akkor viszont minden bizonnyal áthidalják valahogy. Mint pl. glib: guint32… ami mindig 32 bites… ha más fordítóval forgatod, elvileg akkor is.)

                    #2066753
                    pointux
                    Felhasználó

                      „Egy dátumhoz úgy adok hozzá x másodpercet, hogy átkonvertálom time_t-re mktime-mal, hozzáadok x-et és visszakonvertálom év, dátum, … formába localtime-mal. Ez egy jó egyszerû megoldás.”
                      Még mindig nem értem, hogy 100 évet miért akarsz másodpercben befogni (mi az értelme ennek)… de mindegy. (De ilyet, szabbványosat nem fogsz találni… bár nem kizárt, hogy valaki olyan elvetemült volt, hogy írt egyet. De lehet, hogy hamarabb megírod, mint megtalálod. :))))

                      #2066754
                      juuzer
                      Felhasználó

                        „Mint írtam long int, és nem vagyok biztos benne, hogy 64 bit alatt is 4 byte-os.”

                        Igaz ez python, … meg nem is nagyon számolgattam vissza, de valami különbség van (legalábbis python alatt). Ami a képen látszik „python.pdf – Az integer és long típus”, … Fibonacci sor, aminek a leírás szerint a 46. eleme már long típusu, a példát kipróbálva viszont csak a 92. elemnél jön elõ a long típus. (Amikor ennél a résznél jártam én is a 64 bittel magyaráztam magamnak.)

                      10 bejegyzés megtekintése - 1-10 / 19
                      • Be kell jelentkezni a hozzászóláshoz.