Avatar billede loproc Praktikant
05. oktober 2004 - 16:06 Der er 10 kommentarer og
1 løsning

DateTime gymnastik

Hejsa

JEg har et lille problem jeg er kørt fast i. Har to DateTime pickers med Kind sat til dtkTime så der kun kan vælges en tid deri. Den ene, dtModeTid angiver hvornår en person møder, og dtSlutTid angiver hvornår vedkommende har fri. Det jeg skal er så at regne ud hvor længe vedkommende har været på arbejde. Der er så det finurlige ved det at det er natarbejde, så angvives mødetiden til at være kl. 21 og sluttiden til 05 så dur minutesbetween jo ikke helt. Jeg har forsøgt med følgende mulighed, som dog giver nogle underlige resultater indimellem:

procedure TForm1.dtModeTidChange(Sender: TObject);
var Min: Cardinal;
begin
dtModeTid.OnChange := nil;
dtSlutTid.OnChange := nil;

if (dtSlutTid.DateTime < dtModeTid.DateTime) then
dtSlutTid.DateTime := Tomorrow + TimeOf(dtSlutTid.DateTime)
else
dtSlutTid.DateTime := Today + TimeOf(dtSlutTid.DateTime);

lblTimer.Caption := IntToStr(MinutesBetween(dtModeTid.DateTime, dtSlutTid.DateTime));

dtModeTid.OnChange := dtModeTidChange;
dtSlutTid.OnChange := dtModeTidChange;
end;

Hvis der er nogen der kan gennemskue en let løsning eller lignende ville jeg blive meget glad for det.

På forhånd tak
Martin Kruse
Avatar billede arne_v Ekspert
05. oktober 2004 - 16:18 #1
Uden at kende meget til hvordan man gør det i Delphi.

Er det så ikke bare at trække fra hinanden og ligge 24 timer hvis negativ ?

16 - 8 = 8 timer

5 - 23 = -18 timer
-18 + 24 = 6 timer
Avatar billede loproc Praktikant
05. oktober 2004 - 16:25 #2
Den skal jo helst udregnes i minutter også...
Avatar billede loproc Praktikant
05. oktober 2004 - 16:26 #3
Tror det vil være bedst at finde en løsning hvor man bruger Delphi's MinutesBetween funktion, men den dur ikke helt umiddelbart da felterne ikke kender til datoen...
Avatar billede arne_v Ekspert
05. oktober 2004 - 16:32 #4
16 - 8 = 480 minutter
5 - 23 = -1080 minutter
-1080 minutter + 1440 minutter = 360 minutter
Avatar billede loproc Praktikant
05. oktober 2004 - 16:37 #5
Jeg mener at den også skal kunne regne hvis det er fra 21:00 til 05:12
Avatar billede arne_v Ekspert
05. oktober 2004 - 16:41 #6
5:12 - 21:00 = -948 minutter
-948 minutter + 1440 minutter = 492 minutter

Det eneste der kræves er at MinutesBetween kan returnere negative tal.
Avatar billede loproc Praktikant
05. oktober 2004 - 16:52 #7
Det kan den nemlig ikke... Det er skide nemt at regne ud med konkrete tal men det er ikke lige sådan at programmere sig ud af...
Avatar billede arne_v Ekspert
05. oktober 2004 - 16:59 #8
Så vender du det jo bare om !

21:00 - 5:12 = 948 minutter
1440 - 948 = 492 minutter
Avatar billede arne_v Ekspert
05. oktober 2004 - 17:00 #9
Altså:

1440 - (start - slut)
Avatar billede loproc Praktikant
05. oktober 2004 - 17:32 #10
Det lykkedes sq - har hvis bare stirret mig blind på det. Følgende kode gjorde tricket:
Min := MinutesBetween(dtModeTid.DateTime, dtSlutTid.DateTime);
if (dtModeTid.Time > dtSlutTid.Time) then Min := 1440 - Min;

Opret lige et svar, så får du point
Avatar billede arne_v Ekspert
05. oktober 2004 - 17:35 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester