Zeit einbeziehen in Programm

Für Fragen von Einsteigern und Programmieranfängern...
qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

Hallo, kennt Lazarus auch Wochentage oder muss ich immer die Daten eingeben, denn es wäre was, das sich ständig wiederholen würde?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Zeit einbeziehen in Programm

Beitrag von pluto »

Ja kennt Lazarus auch. Schau dir mal FormatDataTime an.
MFG
Michael Springwald

qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

Danke!

qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

Hier ein Codeausschnitt der so nicht funktioniert, der Fehler ist in der if ... then Zeile, was muss ich ändern:

Code: Alles auswählen

if encodedate(18,10,2009)<f<21.12.2009 or f>encodedate(03.01.2010) and f<encodedate(08.02.2010) or f>encodedate(21.02.2010) and f<encodedate(05.04.2010) or f>18.04.2010 and f<12.07.2010 or f>encodedate(15.08.2010) and f<encodedate(04.10.2010) or f>encodedate(24.10.2010) and f<encodedate(27.12.2010) then
    begin
    h:=07;
    e:=trunc(now);
    b:=e+encodetime(h,05,00,00);
    if a>b then
    begin
    e:=e+1;
    end;
    b:=e+encodetime(h,05,00,00);
    d:=timetostr(b-a);
    form10.listbox1.items.add(d+'        500           B         Kantonsschule');
 
    e:=trunc(now);
    b:=e+encodetime(h,18,00,00);
    if a>b then
    begin
    e:=e+1;
    end;
    b:=e+encodetime(h,18,00,00);
    d:=timetostr(b-a);
    form10.listbox1.items.add(d+'        500           C3        Kantonsschule');
 
    e:=trunc(now);
    b:=e+encodetime(h,51,00,00);
    if a>b then
    begin
    e:=e+1;
    end;
    b:=e+encodetime(h,51,00,00);
    d:=timetostr(b-a);
    form10.listbox1.items.add(d+'        500           C3        Kantonsschule');
 
 
    h:=08;
    e:=trunc(now);
    b:=e+encodetime(h,20,00,00);
    if a>b then
    begin
    e:=e+1;
    end;
    b:=e+encodetime(h,20,00,00);
    d:=timetostr(b-a);
    form10.listbox1.items.add(d+'        500           C3        Kantonsschule');
    end;
    form10.listbox1.sorted:=true;
    form10.showmodal;
    end;

qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

Ich hab jetzt die Fehler beseitigt,( ja ich weiss, Sorry, dass ich sowas Dummes ins Forum gestellt habe). Jetzt ha ich nur noch eine Frage durch was soll ich or ersetzen das geht ja bei TDate anscheinend nicht?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Zeit einbeziehen in Programm

Beitrag von pluto »

or und and gehen "nur" bei Variablen von Typ Boolean.Z.B. würde sowas gehen if (test = '1') and (test = '2') then ob das jetzt sinn macht ist eine andere Frage. Du musst also eine Bedienung auf stellen, die True oder False sein kann.
MFG
Michael Springwald

qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

Danke!

qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

> und < scheinen auch nicht zu funktionieren: Got Boolean, expecteded Tdate Time.
Das ist jetzt schlecht, wie kann man das überhaupt lösen?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zeit einbeziehen in Programm

Beitrag von Socke »

qwertzp hat geschrieben:> und < scheinen auch nicht zu funktionieren: Got Boolean, expecteded Tdate Time.
Das ist jetzt schlecht, wie kann man das überhaupt lösen?
Vielleicht solltest du dir mal die Grundlagen zu boolschen Operatoren zu Gemüte führen. Die Fehlermeldung sagts ja: du mischst boolsche Ausdrücke (True/False) mit Zeiten (TDateTime). Du hast also noch irgendwo einen logischen (Denk-)Fehler, den der Compiler nicht verarbeiten kann.

hier mal ein paar Beispiele, um die Typen klar zu stellen:

Code: Alles auswählen

var b1,b2, b3: Boolean; d1,d2: TDateTime;
begin
  b1 := d1 < d2;
  b1 := b1 and b2 or b3;
  b1 := b1 and (b2 or b3);
  d1 := not (b1 and (d1 < d2)) or (d2 <> d1);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

qwertzp
Beiträge: 50
Registriert: Do 28. Jan 2010, 13:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Zeit einbeziehen in Programm

Beitrag von qwertzp »

Danke!

martinjakobs
Beiträge: 12
Registriert: Mo 22. Mär 2010, 19:42

Re: Zeit einbeziehen in Programm

Beitrag von martinjakobs »

Hallo zusammen,

ich habe eine Frage zu "TDateTime". Ich möchte die Zeit stoppen, die eine
rekursive Prozedur zur Ausführung braucht. Dazu müsste ich irgendwie nicht nur
Sekunden, sondern auch MILLISEKUNDEN ermitteln können.

In Delphi gab es dazu den Befehl: "MillisecondOf(...)"

Haben wir hier einen entsprechenden Befehl?

Danke schonmal für die Hilfe.

Martin

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Zeit einbeziehen in Programm

Beitrag von Hitman »

martinjakobs hat geschrieben:Hallo zusammen,

ich habe eine Frage zu "TDateTime". Ich möchte die Zeit stoppen, die eine
rekursive Prozedur zur Ausführung braucht. Dazu müsste ich irgendwie nicht nur
Sekunden, sondern auch MILLISEKUNDEN ermitteln können.

In Delphi gab es dazu den Befehl: "MillisecondOf(...)"

Haben wir hier einen entsprechenden Befehl?

Danke schonmal für die Hilfe.

Martin
Dafür ist TDateTime nicht geeignet. uses LCLIntf; GetTickCount();

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zeit einbeziehen in Programm

Beitrag von Socke »

Hitman hat geschrieben:Dafür ist TDateTime nicht geeignet. uses LCLIntf; GetTickCount();
*räusper* schonmal die Implementation für LCLIntf.GetTickCount für nicht Windwos angesehen?

Code: Alles auswählen

Result := DWord(Trunc(Now * 24 * 60 * 60 * 1000));
Jetzt rate mal, welchen Datentyp Now zurück liefert?

Das Problem liegt eher daran, dass TDateTime ein Fließkomma-Wert ist und damit mit einer variablen Genauigkeit arbeitet. D.h. je näher an 1.1.1900 desto genauer. Da wir mit ca 110 Jahren noch relativ nahe daran sind, dürfte die Genauigkeit noch ausreichen; in zwanzigtausend Jahren vielleicht nicht mehr, aber dann gibts auch nen neuen Datentyp :D. Bei mir funktioniert ein Benchmark mit TDateTime aber problemlos auch im Millisekundenbereich (wenns Nanosekunden werden, weiß ich nicht). Am Ende einfach wie oben umrechnen (wenns sehr lang wird Qword nehmen).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

martinjakobs
Beiträge: 12
Registriert: Mo 22. Mär 2010, 19:42

Re: Zeit einbeziehen in Programm

Beitrag von martinjakobs »

Hallo,

erstmal Danke für den Tipp mit "getTickCount". Das funktioniert schonmal.
Die zweite Lösung mit dem Multiplizieren funktioniert auch!

Bestens also. Hab ich gleich zwei alternative Lösungen.

Kann ich morgen im Unterricht meine Schüler gleich anwenden lassen.
Ich hab letzte Woche nämlich beschlossen, von Delphi auf Lazarus
umzusteigen. Bisher klappts ja auch.

Also, nochmal vielen Dank an beide Lösungen und
gute Nacht.

Martin

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zeit einbeziehen in Programm

Beitrag von Socke »

martinjakobs hat geschrieben:Die zweite Lösung mit dem Multiplizieren funktioniert auch!
Kein Wunder, so wirds schließlich auch gemacht :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten