Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DateUtils Problem (https://www.delphipraxis.net/70923-dateutils-problem.html)

mOzZzI 6. Jun 2006 21:49


DateUtils Problem
 
Hallo Freunde,
ich habe ein Problem mit der Unit DateUtils.
Ich bin gerade dabei einen Wecker zu basteln, und versuche einen Eintrag in einer ListView zu erstellen, alles klappt auch bis jetzt, leider klappt mein SubItem der Listview mit der Caption "Verbleibende Zeit"
nicht. Hier erstmal ein wenig Code:

Delphi-Quellcode:
procedure TForm1.AddEintrag;
var LI: TListItem;
var Datejetzt: TTime;
var Datelist: TTime;
var resthours: Integer;
var restminutes: Integer;
var restseconds: Integer;
begin
  Datejetzt:=Time;
  Datelist:=StrToTime(Edit1.Text);
  resthours:= HoursBetween(datejetzt,datelist);
  restminutes:= MinutesBetween(datejetzt, datelist);
  restseconds:= SecondsBetween(datejetzt, datelist);
  LI := ListView1.Items.Insert(0);
  LI.Caption := RichEdit2.Text;
  LI.SubItems.Add(RichEdit1.Text);
  LI.SubItems.Add(Edit1.Text);
  LI.SubItems.Add(DateToSTr(DateTimePicker1.Time));
  LI.SubItems.Add(inttostr(resthours)+':'+inttostr(restminutes)+':'+inttostr(restseconds));
end;
Bloß irgendwie zeigt er mir die verücktesten Uhrzeiten an :cry:

Grüße Philipp

[Edit]Bsp:
Jetzige Uhrzeit 22:51:30
Restzeit(was angezeigt wird): 22:1371:82280

arbu man 6. Jun 2006 22:06

Re: DateUtils Problem
 
Delphi-Quellcode:
LI.SubItems.Add(DateToSTr(DateTimePicker1.Time));
Also aus einer Zeit soll mit Datumtostr was werden ?
Delphi-Quellcode:
LI.SubItems.Add(TimeToSTr(DateTimePicker1.Time));
wohl eher

Edit: OH ich glaube time ist vom type tdatetime :oops:

also
Timetostr und datetostring benutzen.

zu TDatetime und TTime und TDate das sind alles float werte d.h. der wert vor dem komma gibt das datum an der dahinter die zeit
Code:
1,2
| |
| +Zeit
+Datum
Auch ist es manchmal hilfreich mit Zeiten als Zahlen zu rechnen

Edit2: hier noch einige zeit functionen aus meinen stundenplan
Delphi-Quellcode:
function isTimeInTimes(t, von, bis: TTime): boolean;
begin
  result:= ( (von < t) and (t < bis) );
end;

function Zeitbis(jetzt, dann: TTime): TTime;
begin
  result:= dann - jetzt;
end;

function timetominutes(t: TTime): integer;
begin
  result:= Hourof(t)*60+MinuteOf(t);
end;

function timetoseconds(t: TTime): integer;
begin
  result:= (Hourof(t)*60+MinuteOf(t))*60 + SecondOf(t);
end;

Hawkeye219 6. Jun 2006 22:11

Re: DateUtils Problem
 
Hallo Philipp,

SecondsBetween liefert die Zeitspanne zwischen zwei Zeitpunkten in Sekunden, nicht den Sekunden-Anteil dieser Zeitspanne.

Versuche es einmal mit

Delphi-Quellcode:
LI.SubItems.Add(TimeToStr(DateList - DateJetzt));
Gruß Hawkeye

mOzZzI 6. Jun 2006 22:25

Re: DateUtils Problem
 
Zitat:

Zitat von Hawkeye219
Hallo Philipp,

SecondsBetween liefert die Zeitspanne zwischen zwei Zeitpunkten in Sekunden, nicht den Sekunden-Anteil dieser Zeitspanne.

Versuche es einmal mit

Delphi-Quellcode:
LI.SubItems.Add(TimeToStr(DateList - DateJetzt));
Gruß Hawkeye

Das hört sich sehr gut an, aber leider funzt das net so.
Wir haben jetz 23:23:00 so, wenn ich dann jetz einstell um 00:00:00 soll was passieren, dann wird als Restzeit 23:23:00 angezeigt, bloß warum ?

arbu man 6. Jun 2006 22:28

Re: DateUtils Problem
 
00:00:00war wohl schon dann ist bald 24:00:00

Edit: 0,0= 00:00:00 0,99999~24:00:00

mOzZzI 6. Jun 2006 22:29

Re: DateUtils Problem
 
Danke, geht!


Noch eine Frage:
Wie könnte man da jetz noch das Datum mit ins Spiel bringen?
Z-B.

am 07.06.2006 soll um 17:30 das gemacht werden...
wie krieg ich dann da die verbleibende Zeit raus?

marabu 7. Jun 2006 06:22

Re: DateUtils Problem
 
Hallo Philipp,

in Beitrag #3 hat Hawkeye dir zwei Dinge gezeigt:

(1) Die Zeitspanne zwischen zwei Zeitpunkten kann in Delphi einfach durch Differenzbildung bestimmt werden:

(2) Auch wenn das Ergebnis eine Zeitspanne darstellt und keinen Zeitpunkt, kann für die Darstellung problemlos das übliche Zeitformat verwendet werden.

Delphi-Quellcode:
var
  sDiff: String;
  dtDiff, dtEvent: TDateTime;
begin
  dtDiff := dtEvent - Now;
  sDiff := TimeToStr(dtDiff);
end;
Dabei verwendet die Funktion TimeToStr() nur den Zeitanteil von dtDiff, welcher Frac(dtDiff) ist. Der Datumsanteil Trunc(dtDiff) kann nicht so einfach mit DateToStr() sichtbar gemacht werden, da hier eine andere Semantik vorliegt. Dieser Wert repräsentiert die Anzahl von ganzen Tagen zwischen zwei Zeitpunkten. Du kannst ihn z.B. als Kombination von Tagen und Wochen darstellen:

Delphi-Quellcode:
function DaysToWeeks(n: Integer): String;
var
  nDays, nWeeks: Word;
  bPast: Boolean;
  sWeeks, sDays: String;
begin
  bPast := n < 0;
  n := Abs(n);
  DivMod(n, 7, nWeeks, nDays);
  if n = 0 then Result := '' else
  begin
    sWeeks := IfThen(nWeeks = 0, '',
      IfThen(nWeeks = 1, '1 Woche ', Format('%d Wochen ', [nWeeks])));
    sDays := IfThen(nDays = 0, '',
      IfThen(nDays = 1, '1 Tag ', Format('%d Tage ', [nDays])));
    Result := IfThen(bPast, 'vor ', 'noch ') + sWeeks + sDays;
  end;
end;
Getippt und nicht getestet.

Grüße vom marabu

Edit: Jetzt schon ein wenig getestet...

mOzZzI 7. Jun 2006 10:01

Re: DateUtils Problem
 
Also, ich habe jetz alleine ein bisschen weitergewerkelt,
und dass ist dabei herausgekommen:

Delphi-Quellcode:
  date:= DateToStr(DateTimePicker1.Time);
  uhrzeit:= EdtWeckHour.Text+':'+EdtWeckMinu.Text+':'+EdtWeckSecu.Text;
  datetime:=date+' '+uhrzeit;
  diff:= DateTimeToStr(now)-datetime; //hier ist noch der fehler
fehler:= Operator ist auf diesen OperandenTyp nocht anwendbar

Dabei will ich doch bloß das jetzige Datum und die jetzige Uhrzeit
07.06.2006 11:00:25
mit dem eingegeben Datum und der eingegeben Uhrzeit
08.06.2006 15:30:00
abziehen und dann die Differenz daraus soll diff sein.

Bloß geht das irgendwie nicht :gruebel:

arbu man 7. Jun 2006 10:26

Re: DateUtils Problem
 
Delphi-Quellcode:
diff:= DateTimeToStr(now)-datetime; //hier ist noch der fehler
DateTimeToStr(now) gibt das nicht einen string zurück ?
Delphi-Quellcode:
diff:= DateTimeToStr(now-strtodatetime(datetime));
so sollte es gehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 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