Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TDateTime (https://www.delphipraxis.net/21635-tdatetime.html)

dR4g0N 5. Mai 2004 21:04


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:
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.
Wo ist mein Fehler? o_O

Stanlay Hanks 5. Mai 2004 21:08

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:

dR4g0N 5. Mai 2004 21:12

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 ...

Stanlay Hanks 5. Mai 2004 21:18

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:

xineohp 5. Mai 2004 21:28

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.

dR4g0N 5. Mai 2004 21:30

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?

xineohp 5. Mai 2004 21:36

Re: TDateTime
 
wozu gibts die OH :roll: :

Zitat:

Die Funktion gibt die Anzahl ganzer Tage zwischen den beiden angegebenen TDateTime-Werten zurück.

Unit

DateUtils

Kategorie

Datum/Zeit

Delphi-Syntax:

function DaysBetween(const ANow, AThen: TDateTime): Integer;

C++ Syntax:

extern PACKAGE int __fastcall DaysBetween(const System::TDateTime ANow, const System::TDateTime AThen);

Beschreibung

Mit DaysBetween können Sie die Differenz zwischen zwei TDateTime-Werten in Tagen ermitteln.

DaysBetween zählt nur ganze Tage. Die Differenz zwischen dem 31.12.1999, 23:59 Uhr und dem 01.01.2000, 23:58 Uhr wird von der Funktion DaysBetween also als Null berechnet, da die Differenz um eine Minute kürzer als ein ganzer Tag ist.

xineohp 5. Mai 2004 21:38

Re: TDateTime
 
oder als Code:

Delphi-Quellcode:
uses ..., DateUtils;

...

procedure ...
var
  Differenz: integer;
  Startzeit,
  EndZeit: tDatetime;
begin
  Differenz := Daysbetween( Startzeit, Endzeit );
end;
EDIT: uses-Klausel vergessen ...

dR4g0N 5. Mai 2004 21:40

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

fkerber 5. Mai 2004 21:41

Re: TDateTime
 
Hi!

Warum ziehst du dann nicht einfach 1899 ab?


Ciao fkerber

xineohp 5. Mai 2004 21:45

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.

xineohp 5. Mai 2004 21:46

Re: TDateTime
 
@fkerber

wenn dann muss er DateDelta = 693594 abziehen, da tDatetime intern in Tagen zählt. (siehe meinen letzten post).

dR4g0N 5. Mai 2004 21:53

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:
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.
Jedoch ist das noch nicht ganz richtig, weil wenn ich:

20.02.2004
-20.02.2002

mache, kommt:

31.12.0001 raus.

Ich muss erstmal drüber nachdenken, wo mein Denkfehler liegt ^^

Muetze1 5. Mai 2004 22:05

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

dR4g0N 5. Mai 2004 22:12

Re: TDateTime
 
ähh sry vertippt es komm dann

31.12.0002 raus

also

31 Tage und 12 Monate zuviel ... ^^

Robert_G 5. Mai 2004 22:16

Re: TDateTime
 
Differenz in Tagen?
Jaaanz einfach....
DateTime ist Double, vorne Tage hinten Millisekunden.
Also:
Delphi-Quellcode:
  Diff := trunc(DateTime1) - trunc(DateTime2);

dR4g0N 5. Mai 2004 22:43

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 06:38 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