![]() |
TDateTime
Also folgendes Problem:
Ich möchte 2 Daten subtrahieren. Jedoch kommt immer eine falsche Jahreszahl raus (Jahreszahl + 1900). Es handelt sich um ein Konsolenprogramm.
Delphi-Quellcode:
Wo ist mein Fehler? o_O
program date1;
{$APPTYPE CONSOLE} uses SysUtils; var date1, date2, date3 : String; mdate1, mdate2, mdate3 : TDateTime; begin WriteLn('Bitte geben Sie das 1. Datum ein: [dd.mm.yyyy]'); ReadLn(date1); WriteLn('Bitte geben Sie das 2. Datum ein: [dd.mm.yyyy]'); ReadLn(date2); mdate1 := StrToDate(date1); mdate2 := StrToDate(date2); mdate3 := mdate1 - mdate2; date3 := DateToStr(mdate3); WriteLn('Die Differenz betraegt: ', date3); ReadLn end. |
Re: TDateTime
Hi. Ist das erste Datum größer oder kleiner als das erste? ;) Ich könnte mir vorstellen, dass bei 16.05.1903 - 01.12.2054 irgendwas falsches rauskommt.
Man liest sich, Stanlay :hi: |
Re: TDateTime
Ohh ganz vergessen. Ich gehe davon aus der Anwender automatisch das erste Datum als größeres nimmt.
z.B. 10.05.2004 08.02.2002 oder so ... |
Re: TDateTime
Jetzt fällt mir grade ein: Was soll denn dabei rauskommen? Die Anzahl der Tag zwischen den zwei Daten? Dann schau dir mal in der OH "DaysBetween" an, das könnte dir weiterhelfen :)
Man liest sich, Stanlay :hi: |
Re: TDateTime
moin,
wenn du als Ergebnis ein Datumsformat haben möchtest kannst du auch die Konstante "DateDelta" von der Differenz subtrahieren. Aber ich würde an deiner Stelle lieber die "...Between" Funktionen verwenden. |
Re: TDateTime
kann man in einem konsolenprogramm eine funktion aufrufen? weil da zeigt er mir immer nen error ^^
//EDIT: hat denn jmd einen bsp code für die daysbetween function? |
Re: TDateTime
wozu gibts die OH :roll: :
Zitat:
|
Re: TDateTime
oder als Code:
Delphi-Quellcode:
EDIT: uses-Klausel vergessen ...
uses ..., DateUtils;
... procedure ... var Differenz: integer; Startzeit, EndZeit: tDatetime; begin Differenz := Daysbetween( Startzeit, Endzeit ); end; |
Re: TDateTime
jo thx erstmal bin gerade dahintergestiegen warum der oben genannte code nicht funktioniert.
hab gehört die windows zeitrechnung fängt erst 1899 an. Somit kann er nicht das ja 3 ausgeben sondern zählt die 3 + 1899 und kommt so auf 1902. ^^ naja egal ...teste dann einfach weiter |
Re: TDateTime
Hi!
Warum ziehst du dann nicht einfach 1899 ab? Ciao fkerber |
Re: TDateTime
jupp, genau dafür ist "DateDelta" da, entspricht genau den Tagen zwischen dem Jahre 0 und 1899.
PS: tDatetime Variablen sind eigentlich real Werte ... der Vorkommateil gibt die Tage seit 1899 an und der Nachkommateil den Rest. Deswegen ergibt ZeitB-ZeitA-DateDelta die Anzahl der dazwischenliegenden Tage und Tagesbruchteile. |
Re: TDateTime
@fkerber
wenn dann muss er DateDelta = 693594 abziehen, da tDatetime intern in Tagen zählt. (siehe meinen letzten post). |
Re: TDateTime
boah mein kopp der burnt ein wenig. Soviele neue Sachen. Ich glaube ich hab mehr gelrent als in den letzten 6 Info Std. ^^ Naja ich bin jetzt bei folgendem Code:
Delphi-Quellcode:
Jedoch ist das noch nicht ganz richtig, weil wenn ich:
program datum;
{$APPTYPE CONSOLE} uses SysUtils; var date1, date2, date3 : String; mdate1, mdate2, mdate3 : TDateTime; begin WriteLn('Bitte geben Sie das 1. Datum ein: [dd.mm.yyyy]'); ReadLn(date1); WriteLn('Bitte geben Sie das 2. Datum ein: [dd.mm.yyyy]'); ReadLn(date2); mdate1 := StrToDate(date1); mdate2 := StrToDate(date2); mdate3 := mdate1 - mdate2 - DateDelta; date3 := DateToStr(mdate3); WriteLn('Die Differenz betraegt: ', date3); ReadLn end. 20.02.2004 -20.02.2002 mache, kommt: 31.12.0001 raus. Ich muss erstmal drüber nachdenken, wo mein Denkfehler liegt ^^ |
Re: TDateTime
Moin!
Wieso? Ist doch völlig richtig! Die Differenz (die Tage dazwischen) betragen 1 Jahr, 12 Monate und 31 Tage. Wenn du glatt 2 Jahre haben willst, dann rechne +1. MfG Muetze1 |
Re: TDateTime
ähh sry vertippt es komm dann
31.12.0002 raus also 31 Tage und 12 Monate zuviel ... ^^ |
Re: TDateTime
Differenz in Tagen?
Jaaanz einfach.... DateTime ist Double, vorne Tage hinten Millisekunden. Also:
Delphi-Quellcode:
Diff := trunc(DateTime1) - trunc(DateTime2);
|
Re: TDateTime
Wahhh wieso sagt hier eigentlich jeder was anderes? :P
Naja glaube, es ist einfach zu spät, werde jetzt schlafen gehe. Thx @ all die mir geholfen haben :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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