Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Uhrzeit Rest Min und Sec (https://www.delphipraxis.net/177848-uhrzeit-rest-min-und-sec.html)

Patrick Star 1. Dez 2013 10:41

Uhrzeit Rest Min und Sec
 
Hallo Zusammen,

Brauche etwas Hilfe bei der Uhrzeit Geschichte.
Anzeigen von Uhrzeit und Datum ist mit klar, ABER
wie zeige ich in einem Label die Restlichen Minuten und Sekunden
der Aktuellen Stunde an ???
Oder gibt es da eine Fertige Kompo für Delphi 6 ?

Danke und einen schönen 1. Advent

Patrick

himitsu 1. Dez 2013 10:55

AW: Uhrzeit Rest Min und Sec
 
Delphi-Referenz durchsuchenFormatString?
Delphi-Referenz durchsuchenDecodeTime?

Die DateUtils gibt es wohl noch nicht?
Delphi-Referenz durchsuchenMinuteOf Delphi-Referenz durchsuchenSecondOf

Aber egal ... das ist alles nur Mathe und kann man sich auch selber rausrechnen.
In Delphi-Referenz durchsuchenTDateTime steht ja, wie das aufgebaut ist...

Perlsau 1. Dez 2013 14:16

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von Patrick Star (Beitrag 1238071)
Brauche etwas Hilfe bei der Uhrzeit Geschichte.

Erzähl doch mal: Was ist das für eine Geschichte?

Zitat:

Zitat von Patrick Star (Beitrag 1238071)
Anzeigen von Uhrzeit und Datum ist mit klar, ABER wie zeige ich in einem Label die Restlichen Minuten und Sekunden der Aktuellen Stunde an ??? Oder gibt es da eine Fertige Kompo für Delphi 6 ?

Was bedeutet "die Restlichen Minuten und Sekunden der Aktuellen Stunde"? Rest von was? Möchtest du, daß am Beginn jeder Stunde eine Minuten-Sekunden-Anzeige rückwärts zählt oder eine Sekunden-Anzeige von 3600 bis 0 rückwärts zählt oder wie darf man das verstehen?

Wenn du in einem Label die Zeit anzeigen möchtest, mußt du den aktuellen Datumswert in einen String umwandeln:
Delphi-Quellcode:
Label_Zeit.Caption := SysUtils.DateTimeToStr(Now);
Willst du eine digitale Uhr anzeigen, benötigst du einen Timer, der jede Sekunde das entsprechende Label (oder das Statusbar-Feld) aktualisiert. In die Ereignisbehandlung des Timers schreibst du dann die obige Zeile hinein.

Zitat:

Zitat von Patrick Star (Beitrag 1238071)
Oder gibt es da eine Fertige Kompo für Delphi 6 ?

Da du ja offensichtlich über eine Delphi-6-IDE verfügst (ich nicht), wäre es doch angebracht, selbst nachzuschauen, ob eine deinen Anforderungen entsprechene Komponente in der Palette existiert.

Patrick Star 1. Dez 2013 16:31

AW: Uhrzeit Rest Min und Sec
 
.... also

ich zeige in einem Label die Uhrzeit an. In einem weiteren das Datum.
Nun sollte mir Label3 anzeigen wie viele Minuten und Sekunden bis zum
Ende der Stunde ( der aktuellen) sind.
Also es ist 13:45:00 so sollte Label3 Caption sein: 15:00.
Also es sind noch 15 Minuten und Null Sekunden bis 14:00:00 Uhr.

Hoffe es besser erklärt zu haben.

Danke Euch

Perlsau 1. Dez 2013 17:22

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von Patrick Star (Beitrag 1238116)
Nun sollte mir Label3 anzeigen wie viele Minuten und Sekunden bis zum Ende der Stunde ( der aktuellen) sind.

Und wo liegt dabei das Problem? Rechnen kannst du doch wohl, oder? Mach's doch einfach so, wie du das ohne Programm auch machen würdest. Zur Umsetzung schaust dir dann das einmal genauer an.

stahli 1. Dez 2013 17:49

AW: Uhrzeit Rest Min und Sec
 
Hier mal eine alte Funktion von mir als kleine Anregung.
Das kannst Du sicher noch etwas umbauen...

Delphi-Quellcode:
function DateTimeDurationString(DT: TDateTime; DifFlag, NullFlag, HourFlag, SecondFlag: Boolean): String;
var
  Tage, Hour, Min, Sec, MSec: Word;
  N, Dif: TDateTime;
  S: String;
begin
  S := '';
  if DifFlag then
  begin
    N := Now;
    if DT > N then
      Dif := DT - N
    else
      Dif := 0;
  end
  else
  begin
    if DT > 0 then
      Dif := DT
    else
      Dif := 0;
  end;
  if (Dif <> 0) or (NullFlag) then
  begin
    Tage := Trunc(Dif);
    DecodeTime(Dif, Hour, Min, Sec, MSec);
    if (Tage = 0) or (HourFlag) then
    begin
      if Hour > 0 then
      begin
        if SecondFlag then
          S := FormatDateTime('hh:nn:ss', Dif) + ' h'
        else
          S := FormatDateTime('hh:nn', Dif) + ' h';
      end
      else
      if Min > 0 then
      begin
        if SecondFlag then
          S := FormatDateTime('nn:ss', Dif) + ' min'
        else
          S := FormatDateTime('n', Dif) + ' min';
      end
      else
      begin
        if SecondFlag then
          S := FormatDateTime('ss', Dif) + ' sec'
        else
          S := '< 1 min';
      end;
    end;
    if Tage > 0 then
    begin
      if Dif - Tage = 0 then
        S := ''
      else
      if S <> '' then
        S := ', ' + S;
      if Tage = 1 then
        S := '1 Tag' + S
      else
        S := IntToStr(Tage) + ' Tage' + S;
    end;
  end
  else
    S := '';
  Result := S;
end;

sx2008 1. Dez 2013 19:58

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von Perlsau (Beitrag 1238118)
Und wo liegt dabei das Problem? Rechnen kannst du doch wohl, oder?

Dazu müsste der TE wissen dass TDateTime ein Double-Datentyp ist und ein Tag genau dem Betrag von 1.0 entspricht.
Ein Stunde entspricht also 1.0/24.0.
Delphi-Quellcode:
const
  STUNDEN_PRO_TAG = 24;
var
  jetzt, spaeter : DateTime;
begin
  jetzt := Now;
  spaeter := jetzt + 1.0 / STUNDEN_PRO_TAG;
Aber diese Info hat man als Neuling in Delphi nicht.
Als du zum ersten Mal in der Fahrschule rückwärts einparken musstest - wie war das für dich?
Also bitte etwas Zurückhaltung bei Fragen von Neulingen; du musstest das selbst auch erst lernen.

Sir Rufo 1. Dez 2013 20:38

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von sx2008 (Beitrag 1238121)
Zitat:

Zitat von Perlsau (Beitrag 1238118)
Und wo liegt dabei das Problem? Rechnen kannst du doch wohl, oder?

Dazu müsste der TE wissen dass TDateTime ein Double-Datentyp ist und ein Tag genau dem Betrag von 1.0 entspricht.
Ein Stunde entspricht also 1.0/24.0.
Delphi-Quellcode:
const
  STUNDEN_PRO_TAG = 24;
var
  jetzt, spaeter : DateTime;
begin
  jetzt := Now;
  spaeter := jetzt + 1.0 / STUNDEN_PRO_TAG;
Aber diese Info hat man als Neuling in Delphi nicht.
Als du zum ersten Mal in der Fahrschule rückwärts einparken musstest - wie war das für dich?
Also bitte etwas Zurückhaltung bei Fragen von Neulingen; du musstest das selbst auch erst lernen.

Er ist nicht davon ausgegangen, dass der TE das weiß, und hat deswegen den Link zur Doku von TDateTime mitgegeben.

Und gerade als Neuling sollte man sich auch mit der Doku auseinandersetzen.

So habe ich das jedenfalls als Neuling gemacht (und mache ich auch heute noch).

Also auch bitte etwas Zurückhaltung bei Antworten von alten Hasen und vor allem die (kritisierten) Antworten komplett lesen, auch wenn da der ein oder andere mal durch etwas hitzigere Antworten aufgefallen ist :)

Perlsau 1. Dez 2013 21:24

Off Topic
 
Zitat:

Zitat von Sir Rufo (Beitrag 1238123)
Er ist nicht davon ausgegangen, dass der TE das weiß, und hat deswegen den Link zur Doku von TDateTime mitgegeben.

Ganz genau! :thumb: Manche machen aber immer wieder so lange rum, bis man ihnen einen fertigen Code liefert. Ich kann das nicht leiden, weil in mir der Eindruck von Desinteresse am Lernen und lediglich Interesse daran, daß andere was bringen, entsteht. Am Ende halten sie sich noch für schlau, weil es ihnen immer wieder gelingt, irgend einem arglosen Programmierer den benötigten Code zu entlocken.

Zitat:

Zitat von Sir Rufo (Beitrag 1238123)
Und gerade als Neuling sollte man sich auch mit der Doku auseinandersetzen. So habe ich das jedenfalls als Neuling gemacht (und mache ich auch heute noch).

Man kann, so wie ich das sehe und erfahren habe, Pascal bzw. Delphi wunderbar aus Büchern und Tutorials erlernen. Ich hatte damals, als ich mit Turbo Pascal anfing (ca. 1993), nur einen Wohnungskollegen, der sich das ebenfalls gerade beibrachte (er tagsüber, ich nachts, weil wir nur einen 286er hatten, also er, ich hatte damals keinen eigenen PC). Danach kam Delphi 3, da hatte ich noch keinen Zugang zu Foren. Und erst nachdem ich 2009 mein erstes Projekt mit Delphi 7 Personal abgeschlossen und RadStudio2009 erworben hatte, suchte ich zum leichteren Erlernen der Datenbank-Entwicklung Hilfe in den Delphi-Foren, und auch das nur gelegentlich. Das meiste lernte ich wiederum aus Büchern, autodidaktisch, selbständig und regelmäßig (täglich).

Die meisten meiner Beiträge sind keine Anfragen. Bevor ich in einem der Delphi-Foren eine Anfrage stelle, habe ich in der Regel einige Stunden selbständig mit der Suche nach einer Lösung verbracht, manchmal sogar Tage. Nicht selten stellt sich dann heraus, daß Fehlermeldungen durch meine eigene Nachlässigkeit oder einen sonstigen Leichtsinnsfehler entstanden sind (Thema Wald und Bäume). Vor allem aber bringt mich auch die tägliche Lektüre der Forenthemen weiter. Das ist oft anstrengend, erzeugt wenig bis gar keine Lustgefühle und muß aus meiner Sicht dennoch täglich erledigt werden, bevor ich mit der eigentlichen Arbeit beginne. Eine vernünftige Codeschnipsel-Verwaltung (selbstverständlich immer mit Angabe der jeweiligen Quelle) rundet diese allmorgendliche Tätigkeit ab.

Ich finde, man hilft Anfängern durch Bereitstellung des gewünschten Codes nicht wirklich. Die meisten scheinen wohl auch Schüler oder Studenten zu sein, die ihre Hausaufgaben nicht gemacht haben und nun dringend jemanden suchen, der das für sie erledigt, weil sie keine Ahnung haben. Das kann ich wie gesagt nicht ausstehen (siehe oben). Und es wird mir auch nicht angenehmer, wenn ich dafür kritisiert oder gar beschimpft werde, ob nun öffentlich oder "heimlich" via PM. Wenn durch eine etwas schärfere Ausdrucksweise User, die nicht wirklich Delphi lernen wollen, abgeschreckt werden (O-Ton Admin: "Frank, du verscheuchst mir meine User!"), ist das aus meiner Sicht nicht wirklich ein Verlust. Und ich bin mir ganz sicher, daß es vielen hier ganz genau so geht, obwohl sie ihren Unmut lieber nicht äußern, um nicht von Moderatoren/Admin an- oder abgemahnt zu werden ...

Zitat:

Zitat von Sir Rufo (Beitrag 1238123)
Also auch bitte etwas Zurückhaltung bei Antworten von alten Hasen und vor allem die (kritisierten) Antworten komplett lesen, auch wenn da der ein oder andere mal durch etwas hitzigere Antworten aufgefallen ist :)

So hitzig, wie das angeblich oft gelesen wird, ist das gar nicht gemeint. Man sollte auch mal die Seite des Rezipienten betrachten, der nur allzu empfindlich reagiert, weil er nicht gut mit Kritik umzugehen gelernt hat ...

stahli 1. Dez 2013 21:30

AW: Uhrzeit Rest Min und Sec
 
[OT]... es hilft dem Fragesteller jetzt auch nicht weiter, hier seitenweise die "richtige" Form der Fragestellung zu diskutieren. Die wird sich mit einem wachsenden Verständnis der Materie automatisch bessern. Bin mal gespannt, ob Patrick schon die Flucht angetreten hat.[/OT]

himitsu 2. Dez 2013 00:17

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von sx2008 (Beitrag 1238121)
STUNDEN_PRO_TAG

Falls jemand nicht weiß was wieviel ist und sich daher keine eigene Konstannte erstellen kann:
http://docwiki.embarcadero.com/VCL/X...ls.HoursPerDay

Es gibt tausende Wege, welche man ganz leicht selber rausfinden kann, wenn man allein nur mal paar Minuten land die Units SysUtils und DateUtils ansieht oder allgemein nach Zeitfunktionen in der OH sucht.
Delphi-Quellcode:
ZeitBisMitternacht := IncDay(DateOf(Now)) - Now;
ZeitBisMitternacht := IncDay(Date) - Now;
ZeitBisMitternacht := Tomorrow - Now;
ZeitBisMitternacht := 1 - Time;
...

Perlsau 2. Dez 2013 04:36

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von himitsu (Beitrag 1238130)
Es gibt tausende Wege, welche man ganz leicht selber rausfinden kann, wenn man allein nur mal paar Minuten land die Units SysUtils und DateUtils ansieht oder allgemein nach Zeitfunktionen in der OH sucht.

:thumb: Genau das wollte ich zum Ausdruck bringen: Wenn man ein wenig eigenständig denken und rechnen kann, ist so eine Aufgabe ein Klacks, auch ganz ohne SysUtils und DateUtils. Als ich vor 20 Jahren mit TurboPascal anfing, baute ich mir auch meine eigenen Units für solche Sachen, die mußten dann überall mit :wink:

Es ist schon bezeichnend, daß man nicht mal fragen darf, wo da das eigentliche Problem sei, ohne gleich zur Vor- und Rücksicht ermahnt zu werden.

@alle: Ihr könnt ja eine Abstimmung starten, wenn ihr mich als unerwünscht betrachtet, kein Problem, abgemeldet ist man schnell. Das paßt dann schon ...

Furtbichler 2. Dez 2013 06:10

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von Perlsau (Beitrag 1238133)
@alle: Ihr könnt ja eine Abstimmung starten, wenn ihr mich als unerwünscht betrachtet, kein Problem, abgemeldet ist man schnell. Das paßt dann schon ...

Sei nicht so empfindlich, bist doch keine Perlsissi. :-D

Patrick Star 2. Dez 2013 12:15

AW: Uhrzeit Rest Min und Sec
 
Au Weia

Es war nur eine Frage. Wollte hier keine Lawine lostreten.

SORRY das war nicht meine Absicht gewesen. :roll:
Danke trotzdem an alle die Helfen wollten.

Patrick

p80286 2. Dez 2013 13:23

AW: Uhrzeit Rest Min und Sec
 
@Himitsu
Danke für die Anregung

Ich hätte es mit DecodeTime gelöst.

Gruß
K-H

sx2008 3. Dez 2013 08:28

AW: Uhrzeit Rest Min und Sec
 
Ich hab da noch ein Demo auf meinem Github-Account liegen...
https://github.com/sx2008/Delphi-Tes...PeriodicAction
Es verwendet einen Timer um sekündlich die ablaufende Restzeit in Minuten und Sekunden anzuzeigen.
Wenn die Sollzeit erreicht ist wird eine Aktion ausgelöst (ein Beep+Fensterblitzer) und die neue Sollzeit in der Zukunft wird errechnet.
Vielleicht sollte man zuerst die neue Sollzeit ausrechnen und dann die Aktion starten damit es genauer wird.
Einfach die Zeilen
Delphi-Quellcode:
DoAktion;
und
Delphi-Quellcode:
CalcNextAction;
vertauschen.

himitsu 3. Dez 2013 09:27

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von p80286 (Beitrag 1238184)
@Himitsu
Danke für die Anregung

Ich hätte es mit DecodeTime gelöst.

Ist auch garnicht so weit weg, wo meinen Vorschlägen. :angle:
Zitat:

Delphi-Quellcode:
function Now: TDateTime;
{$IFDEF MSWINDOWS}
var
  SystemTime: TSystemTime;
begin
  GetLocalTime(SystemTime);
  with SystemTime do
    Result := EncodeDate(wYear, wMonth, wDay) +
      EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;
{$ENDIF MSWINDOWS}

Aber, wie gesagt, es gibt noch unzählige andere Wege, welche zum Ziel führen.

TSystemTime, TDateTime, jeder Teil in einem eigenen Integer (ala wYear, wMonth, ...) usw.
Es gibt viele Zeittypen, Funktionen und Rechenweisen, die man ganz gut mischen kann.

Patrick Star 3. Dez 2013 10:31

AW: Uhrzeit Rest Min und Sec
 
Hallo

habe es nun so gelöst. Zumindest tut es das was ich möchte.
Logo kann man das bestimmt noch verbessern. Also mich nicht gleich "Zerreissen".Ich freue mich das es funzt.:)

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
var stunde, minute, sekunde, msec,XStunde,XSekunde : word;

begin
decodeTime (NOW, stunde, minute, sekunde, msec);

    labelA.caption:= 'Zeit ' + timeTostr(now);     // aklt. Uhrzeit
     labelB.Caption:= 'Stunde ' + intTostr(stunde); // atkl. Stunde
      labelC.Caption:= 'Minute ' + intTostr(minute); // aktl. Minute
       labelD.Caption:= 'Sekunde ' + intTostr(sekunde); // aktl. Sekunde

        XStunde:= 60 - minute;
         LabelAktlMinute.Caption := intTostr(XStunde);

        XSekunde:= 60 - sekunde;
         LabelAktlSekunde.Caption := intTostr(XSekunde);

          RestStunde.Caption := '-  ' + intTostr(XStunde)+ ':' + intTostr(XSekunde);
end;

end.

So geht es mal wie schon gesagt.

Danke an alle die mir ein paar Tips gaben.

Patrick

himitsu 3. Dez 2013 10:41

AW: Uhrzeit Rest Min und Sec
 
Nja, zumindestens bei der Codeformatierung könntest du noch ein bissl was verbessern, also vorallem die Einrückung.

Eine einheitliche Namenskonvention macht einem das Leben auch etwas einfacherer.
Abgesehn von der Groß-&Kleinschreibung, aber "RestStunde" springt da schon etwas aus der Reihe, gegenüber den anderen Labels.

Und wenn du labelA bis labelD "ordenliche" Namen gibst, dann währen diese Kommentare im Code auch nicht notwendig. :zwinker:

PS: Mit [DELPHI]...[/DELPHI] sieht es im Forum auch netter aus. (der Button mit dem Helm)

Zitat:

Zitat von Patrick Star (Beitrag 1238327)
Logo kann man das bestimmt noch verbessern. Also mich nicht gleich "Zerreissen".Ich freue mich das es funzt.:)

Wieso zerreißen?
Der Code macht das, was er soll. Mit den Werten/Variablen, welche du verwendest, harmoniert auch perfekt die Funktion DecodeTime.

Abgesehn davon, daß auf deiner GUI einige Informationen "doppelt" vorhanden sind, was man aber nicht beurteilen kann, da wir Diese nicht kennen,
isses eigentlich ganz OK.

p80286 3. Dez 2013 11:23

AW: Uhrzeit Rest Min und Sec
 
Zitat:

Zitat von himitsu (Beitrag 1238330)
...isses eigentlich ganz OK.

Sicher dat?
Delphi-Quellcode:
xStunde:=59-Stunde;
xMinute:=59-minute;
xSekunde:=60-Sekunde;
Ist glaube ich besser

Gruß
K-H

himitsu 3. Dez 2013 12:05

AW: Uhrzeit Rest Min und Sec
 
59 oder 60 .... wenn schon, dann doch überall gleich?

60 ist rechnerisch schon richtig, aber, jetzt wo du es sagst,
Delphi-Quellcode:
(60 - sekunde) mod 60
wäre dann wohl richtiger.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz