AGB  ·  Datenschutz  ·  Impressum  







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

Datum / Zeit Vergleichen

Ein Thema von mymuschy · begonnen am 31. Okt 2006 · letzter Beitrag vom 4. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
mymuschy

Registriert seit: 13. Apr 2004
Ort: Elchingen
19 Beiträge
 
Delphi 7 Enterprise
 
#1

Datum / Zeit Vergleichen

  Alt 31. Okt 2006, 16:05
Hallo.


Warum bekomme ich bei folgender Abfrage das Ergebnis '01.01.2000 09:58:00'?
Ich hatte '01.01.2000 10:02:00' erwartet.
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:
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? Ist aber wohl nicht im Sinne des Erfinders oder?

Freue mich auf eure Beiträge...
Gruß

Stephan
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Datum / Zeit Vergleichen

  Alt 31. Okt 2006, 16:12
z.B. auch so:

if (FileDateToDateTime(Datei.Time) + 2*oneMinute) < now then...
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Datum / Zeit Vergleichen

  Alt 31. Okt 2006, 16:18
Schau Dir mal die Funktion StrToTime an.
Die macht glaube ich das, was Du brauchen könntest.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
marabu

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

Re: Datum / Zeit Vergleichen

  Alt 31. Okt 2006, 16:36
Oder so:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Datum / Zeit Vergleichen

  Alt 31. Okt 2006, 16:53
Zitat von mymuschy:
Warum bekomme ich bei folgender Abfrage das Ergebnis '01.01.2000 09:58:00'?
Ich hatte '01.01.2000 10:02:00' erwartet.
DateTimeToStr(StrToDateTime('01.01.2000 10:00:00') + StrToDateTime('01.01.1000 00:02:00') - StrToDateTime('01.01.1000 00:00:00')
Grund: Wenn Datumswerte vor dem 30.12.1899 liegen, dann werden diese intern (numerisch) als negative Werte dargestellt, allerdings in einer irgendwie etwas unlogischen (bizarren) Weise und weswegen einfach die normalen Rechnungen damit nicht mehr funktionieren!

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.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
exploitbashor

Registriert seit: 1. Nov 2006
4 Beiträge
 
#6

Re: Datum / Zeit Vergleichen

  Alt 1. Nov 2006, 15:28
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:
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;
danke schonmal, exploitbashor
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Datum / Zeit Vergleichen

  Alt 1. Nov 2006, 16:02
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.
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Datum / Zeit Vergleichen

  Alt 1. Nov 2006, 16:57
Zitat von thkerkmann:
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.
In "DateUtils" sind übrigens genau hierfür schon Konstanten definiert, welche heißen:

OneHour, OneMinute, OneSecond, OneMillisecond
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
exploitbashor

Registriert seit: 1. Nov 2006
4 Beiträge
 
#9

Re: Datum / Zeit Vergleichen

  Alt 2. Nov 2006, 17:51
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.
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#10

Re: Datum / Zeit Vergleichen

  Alt 3. Nov 2006, 06:35
Moin ...,
0,5 € is'n Scherz oder?
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  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 11:41 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