Két időintervallum közti "távolság" kiszámítása egyszerűen és gyorsan? (Pascal)
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.
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).
É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...
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]
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.
Próbáld ki így
DT := DateTimeToUnix(time); vagy így
DT := DateTimeToUnix(date); esetleg így
DT := DateTimeToUnix(now);
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!