Kezdőoldal » Számítástechnika » Programozás » Két időintervallum közti...

Két időintervallum közti "távolság" kiszámítása egyszerűen és gyorsan? (Pascal)

Figyelt kérdés

Lekérem az időt és csinálok valamit, majd ismét lekérem az időt, azt szeretném megkapni másodpercben, hogy mennyi mp telt el...

A két időpont egymásból történő kivonása ugye ebben az esetben nem játszik, illetve nem vezetett eredményre, mert ha mondjuk a második változó perc értéke kisebb mint az első, vagy közben "59 perc" helyett 0 perc lett" és stb) akkor a kivonásnak nincs értelme....

Milyen megoldás van erre?


Példa, hogy mire gondolok, ebben valaki megmutatná miként kell "másodpercet számolni egyszerűen":


Program Ido;

Uses CRT, DOS;

Var

o,p,m,s : Word;

meddig : Byte;

Begin

Randomize;

meddig:=0;

Repeat

GetTime(o,p,m,s);

Writeln('kezdés: ',o,' ',p,' ',m);

Delay(Random(90000)+9000);

GetTime(o,p,m,s);

Writeln('vége: ',o,' ',p,' ',m);

Inc(meddig);

Until(meddig = 15);

End.



2015. febr. 2. 21:21
1 2
 1/14 anonim ***** válasza:

Paszkálban nincs olyan függvény, mint a C-ben, hogy univerzális időt lehet vele lekérni? Ha olyat használnál, kivonnád egymásból, majd azt váltanád át "emberi" mértékegységre, az működhet.


Ha ilyen nincs, akkor utánozd le. Váltsd át mindkettőt pl. másodpercre, vond ki egymásból, majd váltsd vissza (ha kell).

2015. febr. 2. 21:28
Hasznos számodra ez a válasz?
 2/14 A kérdező kommentje:
Hibáztam a programban annyiban, hogy mindkét alkalommal azonos változókba kértem le az időt pedig a végén más változókba kellett volna, számolás miatt, pl. o2 p2 m2...
2015. febr. 2. 21:30
 3/14 A kérdező kommentje:
Fájl dátum lekéréskor láttam ilyen bináris formátumú időt (mármint hogy van rá ott lehetőség visszaalakítani binárisból), de óra kapcsán még nem találkoztam ilyennel...
2015. febr. 2. 21:31
 4/14 A kérdező kommentje:

Érdekes az ötlet, valaki segítene benne? (különösen azokat az eseteket lekezelni amikor mondjuk x óra 59 perckor kezdődött az esemény és x+1 óra 02-kor fejeződik be, na ekkor hiába váltok másodpercre...

Mondjuk ha 23:59-kor kezdődik és 0 óra 2 perckor fejeződik be...

2015. febr. 2. 21:37
 5/14 anonim ***** válasza:
A C-ben a time_t változó úgy csinálja, hogy az 1970. január 1-jétől eltelt időt adja meg másodpercben. Csinálhatsz hasonlót, tetszőleges megelőző dátummal. A lényeg, hogy benne legyen a teljes dátum is, és akkor az éjféli váltás sem okoz gondot.
2015. febr. 2. 21:40
Hasznos számodra ez a válasz?
 6/14 anonim ***** válasza:

Declaration


Source position: dateutil.inc line 407


function DateTimeToUnix(


const AValue: TDateTime


):Int64;

Arguments


AValue



DateTime value to convert

Function result


Unix epoch time corresponding to AValue

Description


DateTimeToUnix converts a TDateTime value to a epoch time (i.e. the number of seconds elapsed since 1/1/1970).

See also


UnixToDateTime



Convert Unix epoch time to a TDateTime value



- [link]

2015. febr. 2. 21:41
Hasznos számodra ez a válasz?
 7/14 A kérdező kommentje:

Köszönöm a választ.

A dátumot le tudom kérni a GetDate segítségével, az időt pedig a GetTime segítségével, ezt miképp rakhatom be egy DateTime változóba? (ezek - ahogy látom - csak konvertáló függvények, lekérést nem végeznek, beleírtam a programba, de önmagában - ha beírtam a kódba hogy írja ki - nem írt ki semmit, mert nem kérte le az időt...


Program Ido;

Uses CRT, DOS,DateUtils;

Var

o,p,m,s : Word;

meddig : Byte;

DT : Int64;

DT2:TDateTime;

Begin

Randomize;

meddig:=0;

Repeat

{GetTime(o,p,m,s); }

DT2 := UnixToDateTime(DT);

{Writeln('kezdés: ',o,' ',p,' ',m); }

Delay(Random(90000)+9000);

DT := DateTimeToUnix(DT2);

{GetTime(o,p,m,s);

Writeln('vége: ',o,' ',p,' ',m); }

Inc(meddig);

Until(meddig = 15);

End.

2015. febr. 2. 22:00
 8/14 ejbenjaro ***** válasza:

Próbáld ki így

DT := DateTimeToUnix(time); vagy így

DT := DateTimeToUnix(date); esetleg így

DT := DateTimeToUnix(now);

2015. febr. 2. 22:23
Hasznos számodra ez a válasz?
 9/14 coopper ***** válasza:

Szia.


Ha van DateTime változód akkor szerintem felesleges belekeverni az Unix dátum idő formátumot.


Próbáld valahogy igy :


DT2 := now ;

Writeln('Kezdés: '+FormatDateTime ('yyyymmhh_hhmmss.zzz',DT2));

Delay(Random(90000)+9000);

DT := now ;

Writeln('Végzés: '+FormatDateTime ('yyyymmhh_hhmmss.zzz',DT));


Writeln('Eltelt idő: ',(DT-DT2)*24*3600,' sec');


A DateTime változók az időt elteltét mutatják bizonyos dátumtól (talán 1900.01.01_00:00-től de ez nem biztos a következő kiirás megadja : Writeln('Első dátum: '+FormatDateTime ('yyyymmhh_hhmmss.zzz',0));

)


Ezek az értékek napokban (egészrész) és tizedesórákban (törtrész) vannak.


Tehát ha DT-DT2 értéke pontosan 1 akkor az azt jelenti, hogy 24 óra, ha DT-DT2 értéke 0.5 akkor az 12 órát jelent. 1 másodpercnek a következő érték felel meg : 1/3600/24 (órába, napba)


Sok sikert.

üdv.

2015. febr. 3. 08:24
Hasznos számodra ez a válasz?
 10/14 A kérdező kommentje:
A Pascal nem ismeri a "now" értéket, így a DT2 változóba nem tudok értéket tenni, a getdate és gettime segítségével nem tudom miként tegyem ezt meg, mivel ezek külön-külön adják vissza változókban az értékeket...
2015. febr. 3. 10:42
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!