AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Differenz zwischen Datum / Uhrzeit

Ein Thema von Uncle Cracker · begonnen am 22. Dez 2006 · letzter Beitrag vom 23. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#1

Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 11:03
Guten Morgen,

ich habe jetzt schon das ganze Forum durchsucht und auch einiges gefunden und zusammengebastelt, aber egal wie ich es mache, es werden immmer Fehler erzeugt und ich weiß einfach nicht warum

Ich versuche schon die ganze Zeit die Differenz zwischen zwei Daten zu ermitteln, aber entweder der Monat stimmt nicht oder das Jahre. Die beiden Daten werden normal mit DecodeDate und DecodeTime verglichen, aber es stimmt einfach nicht :/

Hier mal mein Quelltext:

Delphi-Quellcode:
function InJahren(const Damals, Heute: TDateTime): Integer;
var
   DamalsTag, DamalsMonat, DamalsJahr: Word;
   HeuteTag, HeuteMonat, HeuteJahr: Word;
begin
  if Heute < Damals then
  begin
     Result := -1
  end
  else
  begin
    DecodeDate (Damals, DamalsJahr, DamalsMonat, DamalsTag);
    DecodeDate (Heute, HeuteJahr, HeuteMonat, HeuteTag);
    Result := HeuteJahr - DamalsJahr;
    if (HeuteMonat <= DamalsMonat) and (HeuteTag < DamalsTag) then
    begin
      Dec (Result);
    end;
  end;
end;

function diff(Datum: TDateTime): string;
var
    Differenz, jetzt: TDateTime;
    jahre, monate, tage, h, m, s, ms : Word;
begin
  result := '';
  jetzt := Now;
  Differenz := jetzt - Datum;
  DecodeDate(Differenz, jahre, monate, tage);
  if MonthsBetween(jetzt, Datum) {DaysBetween(jetzt, Datum)} <> 0 then
    monate := monate - 1
  else
    monate := 0;
  jahre := InJahren(Datum, Now);
  DecodeTime (Differenz, h, m, s, ms);
  if Jahre <> 0 then result := InttoStr(Jahre) + ' Jahre ';
  if Monate <> 0 then result := result + InttoStr(Monate) + ' Monate ';
  if tage <> 0 then result := result + InttoStr(tage) + ' Tage ';
  if h <> 0 then result := result + InttoStr(h) + ' Stunden ';
  if m <> 0 then result := result + InttoStr(m) + ' Minuten ';
  if s <> 0 then result := result + InttoStr(s) + ' Sekunden ';
end;
Die Funktion InJahren ist eine Funktion, die ich hier im Forum gefunden habe, um die Jahre zu bestimmen...

Also, es wird Datum / Uhrzeit als Paramter im folgenden Format eingegeben '05.10.2002 01:00:12' und wird dann mit dem aktuellen Datum / Uhrzeit verglichen und als Ergebnis soll die Differenz in Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden ausgegeben werden, jedoch funktioniert es nicht immer, da die Funktion z.B. am selben Tag nur ein wenig früher "30 Tage" ausgibt, jedoch bei einem Monat vorher den korrekten Wert und verstehe einfach nicht wieso

Hat vielleicht jemand einen Vorschlag, der funktioniert oder einen komplett anderen Ansatz?
Toll wäre natürlich auch, wenn ich anstatt der Monate, die Wochen angeben könnte...


Thx UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#2

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 11:08
wie wäre es, wenn du einfach das Datum in Sekunden umwandelst, diese voneinander subtrahierst und das Ergebnis dann wieder umwandelst in ein Datum?
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#3

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 12:39
Zitat von fLaSh11:
wie wäre es, wenn du einfach das Datum in Sekunden umwandelst, diese voneinander subtrahierst und das Ergebnis dann wieder umwandelst in ein Datum?
Öhhhmmm...wie soll ich eine Konstante in Sekunden umwandeln? Kann mir grad nicht so vorstellen, wie das gehen soll, hättest du nen Beispiel oder so!?
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#4

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 13:02
Zitat von Uncle Cracker:
Öhhhmmm...wie soll ich eine Konstante in Sekunden umwandeln? Kann mir grad nicht so vorstellen, wie das gehen soll, hättest du nen Beispiel oder so!?
Wieso Konstante?
Ein TDateTime ist nix anderes als ein Double. Im Ganzzahligen Anteil steckt das Datum, im Nachkommawert die Uhrzeit.

Das Bedeutet:
TDateTime(now) - TDateTime(irgendwann) => TDateTime(Differenz) bzw. Double(Differenz).

Integer(Double(Differenz)) = Anzahl der Tage dazwischen. Also Integer(Differenz) / 365 = Anzahl der Jahre. Okay, etwas ungenau wenns genau an der Jahresgrenze ist vor allem bei Schaltjahren, aber die lassen sich ja aus den beiden Jahreszahlen genau ermitteln.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#5

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 13:05
Schonmal versucht die beiden Daten mittels Delphi-Referenz durchsuchenSecondsBetween zu vergleichen und das Ergebnis dieser Operation dann in Minuten / Stunden / Tage / Monate / Jahre umzuwandeln (ist praktisch derselbe Vorschlag wie von flash11, nur das Umwandeln in Sekunden kann man sich sparen)?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 13:58
Ein Zeitdifferenz in Monaten zu zerteilen ist gerade nicht eine sehr gute Idee.
Warum? Weil der Monat keine feste Zeiteinheit ist.
Der Monat Februar ist schließlich um eniges kürzer als der Monat August.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#7

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 14:12
Zitat von Klaus01:
Ein Zeitdifferenz in Monaten zu zerteilen ist gerade nicht eine sehr gute Idee.
Warum? Weil der Monat keine feste Zeiteinheit ist.
Der Monat Februar ist schließlich um eniges kürzer als der Monat August.

Grüße
Klaus
Dann müsste doch aber alles, was über dem Monat steht auch keine Festzeiteinheit mehr sein bzw. mann könnte es dann nicht mehr so einfach berechnen oder?

Schließlich würde dann bei der Berechnung des Jahres 365 als fester Wert gesetzt werden oder eben die Schaltjahrberechnung mit reinkommen und eventuell mit 366 Tagen gerechnet werden oder!?
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 14:21
Zitat:
der Berechnung des Jahres 365 als fester Wert gesetz
Wohl eher 365.25 Tage, da alle 4 Jahre ein Schaltjahr ist.

Hier gab es schonmal ein bis zwei solcher Diskussionen.


Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#9

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 14:45
Also ich habs jetzt so probiert, dass ich den Monat rausgenommen habe und stattdessen Wochen, aber irgendwie häng ich noch am selben Problem...

Solange es 0 Jahre sind, ist alles kein Problem, doch ab einem Jahr wird das Jahr mit angezeigt, jedoch zählen die Wochen weiterhin hoch, z.B. 19 Jahre, 955 Wochen,...
Ich weiß aber auch nicht wie ich es verhindern kann, da ich nicht weiß ob ich nun durch 52 oder 53 Teilen muss :/

So sieht man aktueller Quelltext dazu aus:

Delphi-Quellcode:
function diff(Datum: TDateTime): string;
var
    Differenz, jetzt: TDateTime;
    jahre, monate, tage, h, m, s, ms, woche: Word;
begin
  result := '';
  jetzt := Now;
  Differenz := jetzt - Datum;
  jahre := InJahren(Datum, Now);
  woche := WeeksBetween(jetzt, Datum);
  DecodeTime (Differenz, h, m, s, ms);
  tage := Trunc(Differenz);
  if woche <> 0 then
    tage := tage mod 7;
  if Jahre <> 0 then result := InttoStr(Jahre) + ' Jahre ';
  if woche <> 0 then result := result + InttoStr(woche) + ' Woche ';
  if tage <> 0 then result := result + InttoStr(tage) + ' Tage ';
  if h <> 0 then result := result + InttoStr(h) + ' Stunden ';
  if m <> 0 then result := result + InttoStr(m) + ' Minuten ';
  if s <> 0 then result := result + InttoStr(s) + ' Sekunden ';
end;
Wäre gut wenn mir noch jemand helfen könnte, dass mit den Sekunden hochrechnen bekomme ich irgendwie ni so ganz hin, daher hänge ich immer noch an meinem eigenen Quelltext
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 15:04
Hallo,

hast du keinen Zugriff auf die Routinen YearsBetween() und WeeksBetween() aus der Unit DateUtils?

Vielleicht solltest du deine Delphi-Version in deinem DP-Profil eintragen...

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 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