![]() |
HoursBetween OHNE SysUtils und DateUtils ?
Juten Tach alle miteinander,
ich hab wohl ein kleines Denkproblem und hoffe, dass mir hier jemand auf die Sprünge helfen kann. Also, ich möchte die Differenz in Stunden errechnen, wobei ein Datums-/Zeitwert nur als String vorhanden ist (31.08.2006 12:01). Und den anderen Wert hole ich mir mit "GetLocalTime(SystemTime);". Ich möchte - wenn überhaupt möglich - nicht die "SysUtils.pas" verwenden. Die "DateUtils.pas" hab ich sowieso nicht, da ich im Moment nur mit Delphi5 arbeite.
Delphi-Quellcode:
Ich hab diese Funktion "HoursBetween" schon im Internet gefunden, aber das umwandeln des Strings in TDateTime und das umwandeln der SystemTime in TDateTime fällt mir schwer.
Function HoursBetween(Time1, Time2 : TDateTime) : Double;
Begin result := Time2 - Time1 * 24; End; Hat da einer eine Idee und könnte mir weiterhelfen ? mfg TNO |
Re: HoursBetween OHNE SysUtils und DateUtils ?
Zitat:
![]() Aber wenn Du partout 'ohne' arbeiten willst, dann kannst Du Dir im Quelltext anschauen und kopieren, wie Borland es erledigt hat. Außerdem läuft zz. die Diskussion ![]() Gruß Jürgen |
Re: HoursBetween OHNE SysUtils und DateUtils ?
Zitat:
Aber ich würd gerne mal versuchen das so zu lösen, weil ich auch mal selber dahinter kommen möchte. Vorgekaute Funktionen einfach immer nur zu implementieren find ich persönlich langweilig. Ich benutze auch kaum Komponenten, denn etwas zu Fuß zu lösen regt das Gehirn an. Ich sehe keinerlei Schwierigkeit bei der umsetzung meines Problems, wenn ich die SysUtils benutze. Aber warum einfach, wenn es auch kompliziert geht. Zitat:
Also nicht falsch verstehen, ich will nicht, dass mir hier jemand fertigen Quelltext anbietet. Ich brauche nur Denkhilfe sowas zu lösen. mfg TNO |
Re: HoursBetween OHNE SysUtils und DateUtils ?
Zitat:
|
Re: HoursBetween OHNE SysUtils und DateUtils ?
Delphi-Quellcode:
Du nimmst dein Datum als String und schreibst dir eine Konvertierungsfunktion auf die obige Struktur.
typedef struct _SYSTEMTIME {
WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME; Dann mit SystemTimeToFileTime in eine FILETIME-Struktur umwandeln. Das gleiche mit deiner localen Zeit (GetLocalTime) Die beiden FILETIME-Strukturen sind nichts anderes als ein INT64. Diese beiden Werte voneinander abziehen. Du erhälst das Ergebnis in 100ns Intervallen. Dividieren durch 10*1000*1000 ergibt den Zeitunterschied in Sekunden. |
Re: HoursBetween OHNE SysUtils und DateUtils ?
Zitat:
Das ist genau der Denkansatz den ich brauchte. Ich bastel mir das zuhause mal fertig und dann poste ich den Quelltext. mfg TNO |
AW: HoursBetween OHNE SysUtils und DateUtils ?
Hallo,
das Thema ist zwar schon etwas älter aber ich möchte es dennoch erneut aufgreifen: Auch ich möchte möglichst schlanke exe-Files und daher auf SysUtils verzichten. Dabei gehört die Eingangsfrage vermutlich zu den einfacheren Übungen. Den Quelltext hat der Verfasser nicht mehr gepostet. Hier mal meine Funktion für SecondsBetween:
Delphi-Quellcode:
TDateTime muss natürlich noch deklariert werden. HoursBetween sollte ähnlich aussehen.
// Ermittelt die Sekunden zwischen zwei Zeitpunkten
Function SecondsBetween(const ANow, AThen: TDateTime): Int64; Const SecondsADay = 86400; Begin If ANow < AThen Then Result:=Trunc(SecondsADay * (AThen - ANow)) Else Result:=Trunc(SecondsADay * (ANow - AThen)); End; Ich habe jetzt bereits eine der größeren Suchmaschinen längere Zeit bemüht, finde aber keine Antwort auf mein Problem: Ich möchte gern - ebenfalls ohne SysUtils - Daten in eine Log-Datei schreiben. Vor den Zeilen sollen jeweils Datum und Uhrzeit stehen. Mir ist es also egal, ob ich an das Datum über TDateTime oder sonstwie heran komme. Wichtig ist mir nur der Verzicht auf SysUtils; und natürlich auf andere große Units. Hat dazu jemand eine Idee? Soll ich ein neues Thema aufmachen? Gruß, Alex |
AW: HoursBetween OHNE SysUtils und DateUtils ?
Was ist mit den alten Pascal Routinen?
|
AW: HoursBetween OHNE SysUtils und DateUtils ?
Zitat:
Ich habe aber für mich eine Lösung in Form von procedure GetLocalTime(var lpSystemTime: TSystemTime); gefunden. Im Record habe ich alles schön separiert, was auch das Umrechnen einfach gestaltet. InToStr ist klein und lässt sich aus SysUtils übernehmen. Danke für die Nachricht. Gruß, Alex |
AW: HoursBetween OHNE SysUtils und DateUtils ?
In der WindowsUnit sollten Funktionen zu finden sein, womit du dein TDateTime oder zumindetens TFileTime nach TSystemTime konvertieren kannst.
(der Umweg über die SystemTime-Struktur erspart dir das Datum selber zu zerlegen) Mit ![]() ![]() Und schon kannst du dir daraus eine eigene Funktion erstellen, welche TDateTime nach String konvertiert. [edit] ups, hatte shmia überscrollt :shock: [edit] Zitat:
(fehlende Klammern) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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