Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datum berechnen (https://www.delphipraxis.net/117237-datum-berechnen.html)

Basti552 14. Jul 2008 18:08


Datum berechnen
 
:oops: Hi,
ich bins mal wieder und hab leider ein Problem :oops: :

Wie kann ich, wenn ich einen Tag hab (z.b. den 14.07.2008) berechnen, wie viele Tage(stunden) seit diesem Tag vergangen sind?

wäre äußerst dankbar

Basti552

Thanatos81 14. Jul 2008 18:10

Re: Datum berechnen
 
Falls deine Delphi-Version mindestens Delphi 7 ist, könntest du dir mal die Unit "DateUtils" anschauen. Die hat fertige Funktionen wie HoursBetween(AThen, ANow: TDateTime) oder auch DaysBetween(AThen, ANow: TDateTime).

Basti552 14. Jul 2008 18:14

Re: Datum berechnen
 
Zitat:

Zitat von Thanatos81
Falls deine Delphi-Version mindestens Delphi 7 ist, könntest du dir mal die Unit "DateUtils" anschauen. Die hat fertige Funktionen wie HoursBetween(AThen, ANow: TDateTime) oder auch DaysBetween(AThen, ANow: TDateTime).

Hab leider kein Delphi7:(

Die Muhkuh 14. Jul 2008 18:29

Re: Datum berechnen
 
Welches hast Du dann? Trag es doch bitte ins Profil ein. :)

Klaus01 14. Jul 2008 18:34

Re: Datum berechnen
 
Guten Abend,

die Funktion gibt es auch schon in Delphi 6,
habe leider keine ältere Version bei mir laufen.

Grüße
Klaus

marabu 14. Jul 2008 19:46

Re: Datum berechnen
 
Hallo Sebastian,

unabhängig von deiner Delphi-Version kannst du eine Datumsangabe mit StrToDate() in das interne Format umwandeln und den erhaltenen Wert von Now() abziehen. Das interne Format gibt die Anzahl der Tage seit einem bestimmten Referenzdatum (31.12.1899) an, der Nachkommateil 0.5 bedeutet dann 12 Stunden. StrToDate('14.07.2008') liefert dir den Zeitwert für 0 Uhr, Now() liefert dir den augenblicklichen Zeitwert inklusive Datum.

Freundliche Grüße

Basti552 14. Jul 2008 20:00

Re: Datum berechnen
 
Zitat:

Zitat von marabu
Hallo Sebastian,

unabhängig von deiner Delphi-Version kannst du eine Datumsangabe mit StrToDate() in das interne Format umwandeln und den erhaltenen Wert von Now() abziehen. Das interne Format gibt die Anzahl der Tage seit einem bestimmten Referenzdatum (31.12.1899) an, der Nachkommateil 0.5 bedeutet dann 12 Stunden. StrToDate('14.07.2008') liefert dir den Zeitwert für 0 Uhr, Now() liefert dir den augenblicklichen Zeitwert inklusive Datum.

Freundliche Grüße

Heißt das im Klartext:

Delphi-Quellcode:
Zeit := StrToDate('11.07.2008') - Now();
?

Danke schonmal für die Antworten
P.S.: Hab Delphi 3^^

marabu 14. Jul 2008 20:04

Re: Datum berechnen
 
Du hast Minuend und Subtrahend vertauscht - denke nochmal drüber nach.

Basti552 14. Jul 2008 20:18

Re: Datum berechnen
 
Zitat:

Zitat von marabu
Du hast Minuend und Subtrahend vertauscht - denke nochmal drüber nach.

ähh, was ist denn das interne Format?!

Zeit := Now() - StrToDate('11.07.2008'); (So, das wird mir nich nochma passiern :D ;) )

marabu 14. Jul 2008 20:36

Re: Datum berechnen
 
Datum- und Zeitwerte sind in Delphi (und nicht nur dort) Fließkomma-Zahlen.

Wenn du Zeit als Variable vom Typ TDateTime deklarierst, dann klicke den Typbezeichner mal an und drücke dann F1 um die kontextsensitive Hilfe aufzurufen.
Dort wird dir das DateTime-Konzept von Delphi nochmal mit anderen Worten erklärt.

Gute Nacht

Basti552 15. Jul 2008 15:10

Re: Datum berechnen
 
Hi,
danke, dass hat bis jetz prima funktioniert, nur ein Problem hätt ich noch, wenn ich jetz noch eine Uhrzeit dazu angeben möchte (StrToDate(//zb.// 11.20 11.07.2008)
wie mache ich das?
Vielen Danke, auch für die Antworten davor! :)

BAsti

marabu 15. Jul 2008 15:13

Re: Datum berechnen
 
Hi,

experimentiere mal mit StrToDateTime(DateTimeToStr(Now)).

Freundliche Grüße

Basti552 15. Jul 2008 15:23

Re: Datum berechnen
 
Zitat:

Zitat von marabu
Hi,

experimentiere mal mit StrToDateTime(DateTimeToStr(Now)).

Freundliche Grüße

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Zeit1 := Now() - StrToDateTime('5.5.05 5:55');
label1.Caption := FloatToStr(Zeit1);
end;
:gruebel: Das is ja wohl keine richtige Zeitangabe, obwohl ich vermute, dass das nur an der Zeit liegen kann

@ oben: was bringt mir das direkte umwandeln von now?

marabu 15. Jul 2008 21:10

Re: Datum berechnen
 
Hallo Sebastian,

Zitat:

Zitat von Basti552
... was bringt mir das direkte umwandeln von now? ...

das war mein Versuch dir auf kürzeste Weise die zwei relevanten Konvertierungsfunktionen für DateTime-Kombiwerte nahe zu bringen.

Zitat:

Zitat von Basti552
... Das is ja wohl keine richtige Zeitangabe, obwohl ich vermute, dass das nur an der Zeit liegen kann ...

Zeit1 ist schon eine Zeitangabe, allerdings kein Zeitpunkt. Lies dazu mal diesen Thread durch: Differenz zweier Datumsangaben

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Zeit1 := Now() - StrToDateTime('5.5.05 5:55');
  //label1.Caption := FloatToStr(Zeit1);
  Label1.Caption := DateTimeToStr2(Zeit1, 'd ');
end;
Gute Nacht

Basti552 16. Jul 2008 14:31

Re: Datum berechnen
 
Ja!, jetzt zeigt er auch die Zeit an, nur leider irgendsoein Datum um 19.00 :gruebel:

Liegt das am Anfangsjahr von 'Delphi' (1800 irgendwas) ?

Danke!

BAsti552

marabu 16. Jul 2008 15:44

Re: Datum berechnen
 
Ja, daran liegt das.

DateTimeToStr() und die anderen Konvertierungsroutinen von Delphi gehen immer davon aus, dass der übergebene Wert ein bestimmter relativer Zeitpunkt ist. Wenn du aber zwei Zeitpunkte voneinander abziehst, was wegen des internen Formats DOUBLE wunderbar funktioniert, dann ist das Ergebnis eine Mengenangabe mit der Einheit "Tag". Wenn der Abstand der beiden voneinander subtrahierten Zeitangaben z.B. genau 48 Stunden ist, dann ist das Ergebnis 2.0 - übergeben an DateTimeToStr(2.0) erhältst du dann "01.01.1900 00:00:00".
Weil du die Tage eines Zeitabstand (einer Zeitmenge, eines Zeitintervalls) nicht als Datum interpretieren darfst, hatte ich dir die Funktion DateTimeToStr2() nahegelegt. Die Hintergründe dazu stehen in dem verlinkten Thread.

Das Refernzdatum ist der Beginn (0 Uhr) des 30.12.1899, was du durch DateTimeToStr(0) leicht feststellen kannst. Im Beitrag #6 hatte ich Sylvester 1899 angegeben, was falsch ist - ich hatte aus Versehen bei DateDelta nachgeschaut. In meiner Delphi Online-Hilfe wird bei TDateTime der Referenzzeitpunkt als 30.12.1899 12:00 Uhr angegeben, was auch falsch ist.


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