Kezdőoldal » Számítástechnika » Programozás » Pascal: beépített eljárásokkal...

Pascal: beépített eljárásokkal lehet dátumok közt számolni?

Figyelt kérdés

Szeretném megoldani, hogy a program az aktuális dátumot lekérve és egy múltbeli dátumot bekérve kiszámolná, hogy hány nap telt el a kettő közt.

Nem kézzel szeretném leprogramozni a szökőévek és egyebek figyelését, mert úgy tudom: vannak erre nagyon jó beépített eljárások.

Amit sikerült kideríteni, azt ide másolom.

elvileg csak ki kell vonni egymásból a két dátumot és eredményt kiírni, de a dátum-bekéréssel is gondban vagyok...


program datumprog;


uses SysUtils, DateUtils;


var

aktualis, masik : TDateTime;

begin

aktualis := Now;

ReadLn(masik);

end.



2016. dec. 2. 21:21
1 2
 1/20 anonim ***** válasza:

Dátumot nem tudsz beolvasni közvetlenül. Stringet kell beolvasnod, és azt dátummá konvertálnod: [link]


Ezt olvasgasd.

2016. dec. 2. 21:59
Hasznos számodra ez a válasz?
 2/20 anonim ***** válasza:

Pascalban nincs dátum osztály, a TDateTime gyakorlatilag egy alias a double-re.

Nincs dátum tipus. Az eltelt napok számát tárolja, a tizedes pedig az óra,perc, másodperc. pl 2.5 az 1970-01-02 12:00:00. // nem biztos, hogy epoch, lehet mást vesz 0-nak...


[link]

Stringből az strtodatetime függvénnyel tudsz parsolni dátumot.

Ha ennél komplexebb dolog kell, keress inkább egy normális dátum implementációt.

Pascalhoz nem értek, de biztosan vannak neten bőven.

2016. dec. 2. 22:13
Hasznos számodra ez a válasz?
 3/20 ejbenjaro ***** válasza:

A dayspan függvény lesz a barátod. Lásd itt: [link]

De érdemes megnézned az egész dateutils unitot, mert találhatsz benne még olyan függvényt, vagy eljárást, aminek hasznát veszed, illetve a sysutils unitnak is mintha lennének dátumok kezelésére alkalmas alprogramjai. Mind a két unit doksiját megtalálod a neten free pascalhoz.

2016. dec. 3. 11:54
Hasznos számodra ez a válasz?
 4/20 A kérdező kommentje:

Ennyi sikerült és valamiért rosszul működik:


uses SysUtils, DateUtils;


var

aktualis,masik : TDateTime;

s : string;

begin

aktualis := Now;

s := '2017.02.11.';

masik := StrToDate(s);

WriteLn(DateTimeToStr(masik-aktualis));

WriteLn(' : ',DaySpan(aktualis,masik));

ReadLn;

end.

2016. dec. 3. 14:48
 5/20 anonim ***** válasza:

Mert nem olvastad el amit linkeltem:

[link]

2016. dec. 3. 15:41
Hasznos számodra ez a válasz?
 6/20 A kérdező kommentje:

Ha nem olvastam volna el, akkor nem is alkalmaztam volna a StrToDate függvényt...


Aki egyetlen betűt se ír le csak házi megoldását követeli érdekes módon "neki semmit nem kell elolvasni" sőt "gondolkodnia se kell" mert megíródik magától ötezer variációval a házi.

Aki meg el is olvassa és alkalmazza is amit javasoltak neki, ezt kapja.

Érdekes mentalitás.

2016. dec. 3. 16:58
 7/20 A kérdező kommentje:

Tanácsot kértem valakitől, az illető is csak úgy tudta megoldani, hogy saját függvényt írt a stringből történő TDateTime konvertálásra.

Ennek ellenére én megpróbáltam mindenhogyan szabványos módon, de hiába.

"Unhandled Exception" hibaüzenet van.


program datumprog;


uses SysUtils, DateUtils;


var

aktualis, masik, masik2 : TDateTime;

s, s2 : string;

begin

aktualis := Now;

s := '2017.12.11. 11.11.45';

s2 := '2017.12.11. 11:11:45';

masik := StrToDate(s);

masik2 := StrToDate(s2);

WriteLn(DateTimeToStr(masik-aktualis));

WriteLn(DateTimeToStr(masik2-aktualis));

WriteLn(' : ',DaySpan(aktualis,masik));

WriteLn(' : ',DaySpan(aktualis,masik2));

ReadLn;

end.

2016. dec. 3. 17:24
 8/20 anonim ***** válasza:

"The Date must consist of 1 to three digits, separated by the DateSeparator character."

Ott van kerekperec, hogy a külön erre kitalált DateSeparator karaktert kell használnod, nem pontokat írogatnod a számok közé.

És amúgy én sosem írom meg más háziját, a legutolsó alkalommal, mikor kódot írtam egy feladathoz, 4 különböző nyelvet váltogattam, hogy ne tudja lemásolni.

2016. dec. 3. 17:33
Hasznos számodra ez a válasz?
 9/20 A kérdező kommentje:

StrToDateTime sem működik.

Gyakorlatilag mindhárom dátum-konvertálásnál kiakad.


program datumprog;


uses SysUtils, DateUtils;


var

aktualis, masik, masik2 : TDateTime;

s, s2, sdatum : string;

begin

aktualis := Now;

s := '2017.12.11 11.11.45';

s2 := '2017.12.11 11:11:45';

sdatum := '11-11-2017 11:30';

masik := StrToDate(s);

masik2 := StrToDate(s2);

masik := StrToDateTime(sdatum);

WriteLn(DateTimeToStr(masik-aktualis));

WriteLn(DateTimeToStr(masik2-aktualis));

WriteLn(' : ',DaySpan(aktualis,masik));

WriteLn(' : ',DaySpan(aktualis,masik2));

ReadLn;

end.

2016. dec. 3. 17:40
 10/20 A kérdező kommentje:

Először az aktualis nevű változót amelybe a dátumot kértem, kiírattam a DateTimeToStr segítségével, pontokat írt, gondoltam: pontokat kell írni.

Egyébként nekem fura módon - karakterekkel se működött ezt is próbáltam.

Mindhárom konvertálási próbálkozás kiakad.

a StrToDateTime-ot tényleg a példából másoltam, csak az évszámokat írtam át.


program datumprog;


uses SysUtils, DateUtils;


var

aktualis, masik, masik2 : TDateTime;

s, s2, s3, sdatum : string;

begin

aktualis := Now;

s := '2017-12-11 11-11-45';

masik := StrToDate(s);

s := '2017-12-11 11:11:45';

masik := StrToDate(s);

sdatum := '11-11-2017 11:30';

masik := StrToDateTime(sdatum);

WriteLn(DateTimeToStr(masik-aktualis));

WriteLn(DateTimeToStr(masik2-aktualis));

WriteLn(' : ',DaySpan(aktualis,masik));

WriteLn(' : ',DaySpan(aktualis,masik2));

ReadLn;

end.

2016. dec. 3. 17:55
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!