![]() |
Datum / Zeit Vergleichen
Hallo.
Warum bekomme ich bei folgender Abfrage das Ergebnis '01.01.2000 09:58:00'? Ich hatte '01.01.2000 10:02:00' erwartet.
Delphi-Quellcode:
DateTimeToStr(StrToDateTime('01.01.2000 10:00:00') + StrToDateTime('01.01.1000 00:02:00') - StrToDateTime('01.01.1000 00:00:00')
Gibt es nicht eine einfacheren Weg 2 Minuten zu einem Datei-Datum zu addieren und dann mit der jetzigen Zeit zu vergleichen? Ich versuche das im Moment so:
Delphi-Quellcode:
Ist aber wohl nicht im Sinne des Erfinders oder?
if (FileDateToDateTime(Datei.Time) + StrToDateTime('01.01.1000 00:02:00') - StrToDateTime('01.01.1000 00:00:00')) < now then // Datum älter als 2 min?
Freue mich auf eure Beiträge... |
Re: Datum / Zeit Vergleichen
z.B. auch so:
if (FileDateToDateTime(Datei.Time) + 2*oneMinute) < now then... |
Re: Datum / Zeit Vergleichen
Schau Dir mal die Funktion StrToTime an.
Die macht glaube ich das, was Du brauchen könntest. |
Re: Datum / Zeit Vergleichen
Oder so:
Delphi-Quellcode:
Grüße vom marabu
uses
DateUtils; var fn: TFileName; dt: TDateTime; begin fn := ParamStr(0); dt := FileDateToDateTime(FileAge(fn)); if CompareDateTime(dt - Now, 2 * OneMinute) = GreaterThanValue then ShowMessage('Datei ist älter als 2 Minuten'); end; |
Re: Datum / Zeit Vergleichen
Zitat:
Z.B. wird also der Datumswert 30.12.1899 mit dem internen Wert 0 dargestellt. Der 01.01.1000 wäre dann also 328716 Tage davor, ergo beträgt der interne Wert einer dazugehörenden DateTime-Größe -328716. So weit so gut. Jetzt müsste aber ein Zeitpunkt, der 2 Minuten näher an dem 30.12.1899 liegt, dementsprechend eigentlich auch intern etwas näher an der 0 (also dem 30.12.1899) angesiedelt sein. Tut er aber nicht!!! Anstatt dass diese 2 Minuten den Abstand zur 0 entsprechend verringern würden, wird dieser dadurch nur nochmals vergrößert (d.h. dieser 2 Minutenanteil wird einfach nur so hinters Komma drangehängt, ohne eigentlich richtig reingerechnet zu werden! Warum auch immer.) ...und wegen dieser internen (imho) Unlogik können auch diese ansonsten so normalen schönen Rechnungen mit derartigen Datumswerten (älter als 30.12.1899) nicht mehr aufgehen. |
Re: Datum / Zeit Vergleichen
Ich habe ein ähnliches Problem was ich einfach nicht in den Griff bekomme, würde mich freuen wenn jemand Rat weiß. Ich will einen Parkautomaten nachbauen, der bei bestimmtem geldeinwurf eine spezielle zeit auf die aktuelle draufrechnet. ich glaube der vergleich funktioniert nicht, denn der teil wo zeiten nicht verglichen werden sollen funktioniert, der andere aber nicht.
Delphi-Quellcode:
danke schonmal, exploitbashor
function TZeit.endzeit : string;
var differenz, endtime : TDateTime; ende, frueh, spaet : string [8]; begin frueh := '09:00:00'; spaet := '19:00:00'; if geld > 0 then begin {Falls aktuelle Zeit vor 9 und nach 19 Uhr ist soll bei verschiedenen Geldwerten die jeweilige Zeit auf 9 Uhr draufgerechnet werden} if ((now < strtotime(frueh)) and (now > strtotime(spaet))) then begin if geld = 0.5 then ende := timetostr(strtotime(frueh)+strtotime('00:30:00')); if geld = 1 then ende := timetostr(strtotime(frueh)+strtotime('01:00:00')); if geld = 1.5 then ende := timetostr(strtotime(frueh)+strtotime('01:30:00')); if geld = 2 then ende := timetostr(strtotime(frueh)+strtotime('02:00:00')); end else {Falls die aktuelle Zeit zwischen 9 und 19 uhr liegt soll einfach die entsprechende Zeit draufgerechnet werden --nur dieser teil funktioniert-- } begin if geld = 0.5 then ende := timetostr(now+strtotime('00:30:00')); if geld = 1 then ende := timetostr(now+strtotime('01:00:00')); if geld = 1.5 then ende := timetostr(now+strtotime('01:30:00')); if geld = 2 then ende := timetostr(now+strtotime('02:00:00')); end; {Falls nun die bezahlte zeit über 19 uhr liegt soll der rest der bezahlten zeit auf 9 uhr des folgetages draufgerechnet werden (datum unwichtig, nur uhrzeit)} if (strtotime(ende) > strtotime('19:00:00')) then begin differenz := strtotime(ende) - now; endtime := strtotime(frueh) + differenz; ende := timetostr(endtime); end; endzeit := ende; end; end; |
Re: Datum / Zeit Vergleichen
Hi,
Now = Date + Time also funktionieren deine Vergleiche nicht, da du Datum+Uhrzeit mit nur Uhrzeit vergleichst. Verwende anstelle von Now nur Time, dann sollte es gehen. P.S. Ich würde hier bei der ganzen Vergleicherei niemals mit StrToTime oder so arbeiten. Mann kann vielbesser Werte berechnen. z.B. ist eine Stunde = 1 / 24 und somit 9:00 = 9 * 1 / 24 und so weiter. Gruss Thomas. |
Re: Datum / Zeit Vergleichen
Zitat:
OneHour, OneMinute, OneSecond, OneMillisecond |
Re: Datum / Zeit Vergleichen
Also ich habe jetzt "now" durch "time" ersetzt, doch jetzt bekomme ich beim obersten fall, wenn die zeit zwischen 19 und 9 uhr liegt und ich 0,5 € einwerfe nicht die zeit 9:30 sondern 9:29:59, bei 1 € 9:59:59 usw. also immer eine sekunde zu spät und ich weiß nicht wieso...
der teil, wo der teil bis 19 uhr angerechnet werden soll und der rest auf den folgetag funktioniert gar nicht, es passiert das selbe wie beim ersten fall, es werden einfach alle beträge auf den folgetag angerechnet und nicht die differenz. woher kommt das? edit: ich habe gerade nochmal geschaut und obwohl 19 uhr überschritten ist übergeht er die obere bedingung (zeitvergleich funktioniert immer noch nicht) und er setzt die normale zeit und errechnet die differenz etc. und gibt bei 0,5€ 9:29:59 aus. |
Re: Datum / Zeit Vergleichen
Moin ...,
0,5 € is'n Scherz oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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 by Thomas Breitkreuz