![]() |
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:
Bloß irgendwie zeigt er mir die verücktesten Uhrzeiten an :cry:
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; Grüße Philipp [Edit]Bsp: Jetzige Uhrzeit 22:51:30 Restzeit(was angezeigt wird): 22:1371:82280 |
Re: DateUtils Problem
Delphi-Quellcode:
Also aus einer Zeit soll mit Datumtostr was werden ?
LI.SubItems.Add(DateToSTr(DateTimePicker1.Time));
Delphi-Quellcode:
wohl eher
LI.SubItems.Add(TimeToSTr(DateTimePicker1.Time));
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:
Auch ist es manchmal hilfreich mit Zeiten als Zahlen zu rechnen
1,2
| | | +Zeit +Datum 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; |
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:
Gruß Hawkeye
LI.SubItems.Add(TimeToStr(DateList - DateJetzt));
|
Re: DateUtils Problem
Zitat:
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 ? |
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 |
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? |
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:
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:
var
sDiff: String; dtDiff, dtEvent: TDateTime; begin dtDiff := dtEvent - Now; sDiff := TimeToStr(dtDiff); end;
Delphi-Quellcode:
Getippt und nicht getestet.
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; Grüße vom marabu Edit: Jetzt schon ein wenig getestet... |
Re: DateUtils Problem
Also, ich habe jetz alleine ein bisschen weitergewerkelt,
und dass ist dabei herausgekommen:
Delphi-Quellcode:
fehler:= Operator ist auf diesen OperandenTyp nocht anwendbar
date:= DateToStr(DateTimePicker1.Time);
uhrzeit:= EdtWeckHour.Text+':'+EdtWeckMinu.Text+':'+EdtWeckSecu.Text; datetime:=date+' '+uhrzeit; diff:= DateTimeToStr(now)-datetime; //hier ist noch der fehler 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: |
Re: DateUtils Problem
Delphi-Quellcode:
DateTimeToStr(now) gibt das nicht einen string zurück ?
diff:= DateTimeToStr(now)-datetime; //hier ist noch der fehler
Delphi-Quellcode:
so sollte es gehen
diff:= DateTimeToStr(now-strtodatetime(datetime));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz