AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TDateTimePicker mit modus Time kennt die Zeit nicht
Thema durchsuchen
Ansicht
Themen-Optionen

TDateTimePicker mit modus Time kennt die Zeit nicht

Ein Thema von NicoleWagner · begonnen am 13. Jun 2022 · letzter Beitrag vom 15. Jun 2022
Antwort Antwort
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#1

TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 13. Jun 2022, 20:44
Diese Frage richtet sich an jene, die sich damit bereits die Haare gerauft haben.
Ich finde keinen Weg, der so funktioniert, wie die Handbücher sagen.

Doch der Reihe nach:
Ich verwende einen TDateTimePicker im Modus kind = dkTime, also so, dass man die Zeit einstellen / auswählen kann.
Ich möchte jetzt nichts Anderes tun, als zu vergleichen, wieviele Sekunden zwischen der gewählten Uhrzeit sind und "now".

Das klingt trivial, doch Delphi (XE 3) spinnt herum.
Das Problem: Es wird der 1.1.1899 davor geschrieben oder eben nicht.
Die Vergleiche zwischen den Zeiten werden völlig erratisch, denn ob es der 1.1.1899 um 20:31 oder nur 20:31,
Es fliegt mir in allen Operationen um die Ohren!

Ich probierte bis jetzt TDateTime und TTime als Typen.
Ich arbeitete mit datutils und systemutils. GetTime und Time
Ich probierte SecondsBetween() und griff selbst auf Frac zurück nachdem ich die double Werte versuchte, zu greifen.
Die Ergebnisse sind sehr selten zufällig richtig, doch meistens sehr hohe negative Zahlen.

Meiner Einschätzung nach könnte das Problem entweder liegen in der TDateTimer Komponente von Delphi XE3.
Oder aber in Windows 10, das seit ca 2 Jahren in Feinheiten mit Delphi und dem Datumszugriff muckt. Das äußert sich so, dass das Datum zuweilen als "Null" an Delphi durchgereicht wird. (Als Workaround gab es nur eine Änderung in der Formatanzeige von Win 10.)

Weiß jemand einen Workaround für mich?
Wie gesagt, geht es nur datum, die ausgewählte Zahl des TDateTimePickers mit der Jetzt-Zeit zu vergleichen, und die Sekunden dazwischen zu berechnen, - das leider aber ziemlich oft. D.h. je einfacher der Workaround wäre, desto besser.

Wenn es an Win 10 (21H2) liegen sollte, dann wäre guter Rat teuer.

und PS: Es wird nicht einmal der TDateTimePicker unbedingt benötigt. Es soll nur eine Zeit-Eigabe sein, wo der Nutzer keinen Blödsinn eingeben kann.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 13. Jun 2022, 21:15
Die Vergleichszeit müsste sich doch aus Trunc(date) + DateTimePicker.Time ergeben, oder täusche ich mich? Evtl. kann man das Trunc() auch weglassen, schaden kann es jedenfalls nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 13. Jun 2022, 21:56
In Delphi mit Zeit-Werten umzugehen, ich gebe zu das es mich davor auch schon desöfteren gegrault habe.
Ich gehe da meist sehr pragmatisch vor indem ich alles atomatisiere um dann auf dem Rückweg mir das abzuholen was ich brauche.
Also trenne ich immer schön brav alles in Tag Monat Jahr Stunden Minuten Sekunden Tausendstel auf.
Dann erstelle ich mir ein neue Variable per Encode (Date/Time).
(in deinem Fall würde ich dann SecondsBetween oder ähnliches nutzen)
Okay, in einer Schleife ist das der Overkill, ich meine es ist sehr unperformant, aber es stellt einen immer glücklich da man die volle Kontrolle hat.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 13. Jun 2022, 22:14
Ich habe das gerade unter Delphi 11 probiert und das passt eigentlich ganz gut. Welche Delphi-Version verwendest du?

Delphi-Quellcode:
var
  secs: Int64;
  T1: TDateTime;
  T2: TDateTime;
begin
  T1 := DateTimePicker1.Time;
  T2 := TimeOf(Now);
  secs := SecondsBetween(T1, T2);
  case CompareTime(T1, T2) of
    LessThanValue: ;
    EqualsValue: ;
    GreaterThanValue: secs := -secs;
  end;
  Memo1.Lines.Add(secs.ToString);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 13. Jun 2022, 22:19
Was ist denn nun so schwer?

Du willst nur die Zeiten vergleichen .... also vergleiche doch auch nur die Zeiten und entferne das Datum.

Trunc und Frac würde ich aber hier nicht verwenden,
auch wenn es mathematisch das Gleiche macht, wie Delphi-Referenz durchsuchenDataOf und Delphi-Referenz durchsuchenTimeOf.
"Logisch" macht es was Anderes und so ist der Code auch selbstdokumentierend.
[edit] CompareTime verwendet intern natürlich auch TimeOf [/edit]


Bzw., wenn du nur die Zeit haben willst, warum liest du dann nicht nur die Zeit aus?
Delphi-Referenz durchsuchenTDateTimePicker.DateTime
Delphi-Referenz durchsuchenTDateTimePicker.Date
Delphi-Referenz durchsuchenTDateTimePicker.Time



Alternativ kann man auch zu Beginn (OnCreate) Delphi-Referenz durchsuchenNow bzw. Delphi-Referenz durchsuchenDate in den TDateTimePicker eintragen.
So lange dann niemand zu lange zum Auswählen braucht und Mitternacht verschläft, dann passt es ja noch zusammen.
$2B or not $2B

Geändert von himitsu (13. Jun 2022 um 22:22 Uhr)
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#6

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 15. Jun 2022, 15:12
Lieben Dank an Kodezwerg.
Damit werde ich es wohl probieren.

Mein Problem ist ja genau, dass alle jene Dinge, die ein Programmierer sinnvollerweise tun würde und die daher auch von vielen hier vorgeschlagen wurden, - nicht funktionieren.

Mir bleibt da leider nur, eines von den Videos anzusehen, wo Leute ihren PC-Hardware in Einzelteile zertreten, weil mir die Eigen-Ausführung davon zu kostspielig ist

Geändert von NicoleWagner (15. Jun 2022 um 15:15 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 15. Jun 2022, 16:11
Kleines Testprogramm?
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#8

AW: TDateTimePicker mit modus Time kennt die Zeit nicht

  Alt 15. Jun 2022, 16:53
Hier mal eine einfache Funktion, die nur den Zeitanteil zum Errechnen den Sekunden verwendet.
Delphi-Quellcode:
  function DateTimeToMilliseconds(const ADateTime: TDateTime): Int64;
  begin
    Result := DateTimeToTimeStamp(ADateTime).Time div MSecsPerSec;
  end;
Das ganze ist aus der System.DateUtils abgekupfert.

Hier ein Beispiel für den Vergleich:

Delphi-Quellcode:
 ...
 Seconds := DateTimeToMilliseconds(Now) - DateTimeToMilliseconds(DateTimePicker1.Time);
 ...
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:19 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