Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Es fehlt ein ZEIT Literal (https://www.delphipraxis.net/138235-es-fehlt-ein-zeit-literal.html)

QuickAndDirty 5. Aug 2009 16:08


Es fehlt ein ZEIT Literal
 
OK, ich habe Delphi 7 im Einsatz.
Und es kotzt mich mittlerweile an das ich immer sowas in der art schrieben muss.
Delphi-Quellcode:
If Zeitdatum1-zeitdatum2 >= [i][b]Strtotime[/b][/i]('00:02') then
Ich benutze javaFX das kennt zeit literale da sind
Delphi-Quellcode:
2h 7min 2s
absolut einfach zu gebrauchen.

Ab welcher Version hat Delphi Zeitliterale ?
Und wenn keine das hat, dann bitte ich die jenigen die mit dem Entwicklerteam einen gewissen Kontakt pflegen
doch bitttttte den Tipp einzureichen das Zeitliterale in dem NEUEN COMPILER berücksichtigt werden sollten.

Sherlock 5. Aug 2009 16:39

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von QuickAndDirty
OK, ich habe Delphi 7 im Einsatz.
Und es kotzt mich mittlerweile an das ich immer sowas in der art schrieben muss.

Buh, was für eine Ausdrucksweise :angel2:


Delphi-Quellcode:
If Zeitdatum1-zeitdatum2 >= [i][b]Strtotime[/b][/i]('00:02') then
1) geht das auch auch einfacher und schneller (Beispiel folgt)
und b) unterstützen die Delphitags hier keine Formatierungen (was glaubst Du wie lange ich gerätselt habe, was [i] in dem Zusammenhang soll.

Delphi-Quellcode:
If ((Zeitdatum1-zeitdatum2) >= (2* 1/86400)) then // Lieber einmal zu viel geklammert als einmal zu wenig
Aber es gibt übrigens auch in den DateUtils Delphi-Referenz durchsuchenMinutesBetween. Damit ist es ganz einfach.
Delphi-Quellcode:
If MinutesBetween(Zeitdatum1,zeitdatum2) >= 2 then  // WOW!


Zitat:

Zitat von QuickAndDirty
Ich benutze javaFX das kennt zeit literale da sind
Delphi-Quellcode:
2h 7min 2s
absolut einfach zu gebrauchen.

Mit vermutlich vernachlässigbarer Performance...im Sinne von "Reden wir lieber nicht drüber " :D


Sherlock

mjustin 5. Aug 2009 16:44

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von Sherlock
Mit vermutlich vernachlässigbarer Performance...im sinne von "Reden wir lieber nciht drüber " :D

Kommt drauf an - wenn beide Schreibweisen der Konstanten (also auch bei Verwendung von StrToTime) schon vom Compiler ausgewertet werden können, ist der Laufzeitunterschied praktisch null.

Cheers,

QuickAndDirty 6. Aug 2009 09:15

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von Sherlock
Zitat:

Zitat von QuickAndDirty
OK, ich habe Delphi 7 im Einsatz.
Und es kotzt mich mittlerweile an das ich immer sowas in der art schrieben muss.

Buh, was für eine Ausdrucksweise :angel2:

Du solltest mal meine Bezeichner sehen....

Zitat:

Zitat von Sherlock
Delphi-Quellcode:
If Zeitdatum1-zeitdatum2 >= [i][b]Strtotime[/b][/i]('00:02') then
1) geht das auch auch einfacher und schneller (Beispiel folgt)
und b) unterstützen die Delphitags hier keine Formatierungen (was glaubst Du wie lange ich gerätselt habe, was [i] in dem Zusammenhang soll.

XD . OK . Wann wird dieser Fehler von VBulletin geändert? (Ich liebe die Kundenperspektive!)

Zitat:

Zitat von Sherlock
Delphi-Quellcode:
If ((Zeitdatum1-zeitdatum2) >= (2* 1/86400)) then // Lieber einmal zu viel geklammert als einmal zu wenig

SUPER, ich bekomme kein ZEITLITERAL sonder ne Aufforderung mit Bruchteilen von Tagen zu RECHNEN.
Mann, Mann, Mann Du.

Delphi-Quellcode:
(2* 1/86400)
das ist NICHT
Delphi-Quellcode:
Strtotime('00:02')
SONDERN
Delphi-Quellcode:
Strtotime('00:00:02')
Danke für die Demonstration der totalen Untauglichkeit dieser Methode Zeitliterale zu imitieren.
Wie du sicher selbst zugeben musst, ist dieser Weg recht FEHLERANFÄLLIG.

Zitat:

Zitat von Sherlock
Aber es gibt übrigens auch in den DateUtils Delphi-Referenz durchsuchenMinutesBetween. Damit ist es ganz einfach.
Delphi-Quellcode:
If MinutesBetween(Zeitdatum1,zeitdatum2) >= 2 then  // WOW!

Toll. Denkst du es geht mir ausschließlich um Minuten?

Zitat:

Zitat von Sherlock
Zitat:

Zitat von QuickAndDirty
Ich benutze javaFX das kennt zeit literale da sind
Delphi-Quellcode:
2h 7min 2s
absolut einfach zu gebrauchen.

Mit vermutlich vernachlässigbarer Performance...im Sinne von "Reden wir lieber nicht drüber " :D

Die Performance wird vom Literal nicht beeinflusst. Und du musst zu geben das es im Hinblick auf einen "lesbaren" Quellcode
mehr Sinn macht als
Delphi-Quellcode:
(2*1/24)+(7*1440)+(2*1/86400)
GIB ES ZU!!! *Pistole auf die Brust setzt* ;)

Laufi 6. Aug 2009 09:39

Re: Es fehlt ein ZEIT Literal
 
Hallo!

Du kannst ja einfach schlau sein und sagen
Delphi-Quellcode:
const
  h = 1/24;
  min = h/60;
  s = min/60;
Dann kannst du immer schreiben
Delphi-Quellcode:
2*h + 7*min + 2*s
:shock:

Liebe Grüsse
Laufi

QuickAndDirty 6. Aug 2009 09:50

Re: Es fehlt ein ZEIT Literal
 
@Laufi:
Schon klar. Mir gefällt es aber deutlich besser ohne *+*+*
Und wenn Überhaupt dann müssten diese Konstanten Global(System Unit)definiert sein.

Das 2. Problem ist das,
es als Bezeichner die Funktion
MATH.MIN
überschreibt

bzw.

h und s als oft als lokale Hilfsvariablen verwendet werden.

2h
oder
3s

dagegen kann nichts anderes als ein Literal sein.


Wie dem auch sei. Es wäre schön wenn sich irgendwer für eine elegante Lösung im nächsten Kompiler von
Borland/Inprise/Codegear/Embarcadero einsetzt.
Ich weiß nicht mehr wer es war aber irgendjemand hier aus dem Forum hat soweit ich das mal mitbekommen habe
ab und zu mal Kontakt zu einem der Entwickler...

Sherlock 6. Aug 2009 09:55

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von QuickAndDirty
Zitat:

Zitat von Sherlock
Zitat:

Zitat von QuickAndDirty
OK, ich habe Delphi 7 im Einsatz.
Und es kotzt mich mittlerweile an das ich immer sowas in der art schrieben muss.

Buh, was für eine Ausdrucksweise :angel2:

Du solltest mal meine Bezeichner sehen....

:D

Zitat:

Zitat von QuickAndDirty
Zitat:

Zitat von Sherlock
Aber es gibt übrigens auch in den DateUtils Delphi-Referenz durchsuchenMinutesBetween. Damit ist es ganz einfach.
Delphi-Quellcode:
If MinutesBetween(Zeitdatum1,zeitdatum2) >= 2 then  // WOW!

Toll. Denkst du es geht mir ausschließlich um Minuten?

Diese Funktion hat viele Geschwister, die sich alle um die jeweiligen Zeitabschnitte kümmern können von YearsBetween bis MillisecondsBetween ist alles da. ;)

Zitat:

Zitat von QuickAndDirty
Zitat:

Zitat von Sherlock
Zitat:

Zitat von QuickAndDirty
Ich benutze javaFX das kennt zeit literale da sind
Delphi-Quellcode:
2h 7min 2s
absolut einfach zu gebrauchen.

Mit vermutlich vernachlässigbarer Performance...im Sinne von "Reden wir lieber nicht drüber " :D

Die Performance wird vom Literal nicht beeinflusst. Und du musst zu geben das es im Hinblick auf einen "lesbaren" Quellcode
mehr Sinn macht als
Delphi-Quellcode:
(2*1/24)+(7*1440)+(2*1/86400)
GIB ES ZU!!! *Pistole auf die Brust setzt* ;)

Ja doch :cheers:

Laufis Lösung ist doch gut...einfach entsprechende Konstanten definieren und fertig.

Sherlock

WInfo 6. Aug 2009 09:56

Re: Es fehlt ein ZEIT Literal
 
Wie wäre es mit einem überladenen Record, in welchem die Konvertierung implizit vorgenommen wird? Dann kannst du Problemlos schreiben

Delphi-Quellcode:
if dt1 - dt2 < '00:00' then
if dt1 - dt2 < '20s' then
if dt1 - dt2 < '20m' then
...
Wäre dies nicht ein Vorschlag?

QuickAndDirty 6. Aug 2009 10:01

Re: Es fehlt ein ZEIT Literal
 
@WInfo:
Das geht sicher nicht unter delphi 7 oder?

Ansonsten, wie würde das aussehen? Es muss halt zu TDatetime zuweisungskompatibel sein.

mikhal 6. Aug 2009 10:07

Re: Es fehlt ein ZEIT Literal
 
Vielleicht helfen dir auch die Bibliotheksroutinen aus SysUtils weiter: DecodeDate, EncodeDate, FormatDateTime...

Grüße
Mikhal

WInfo 6. Aug 2009 10:08

Re: Es fehlt ein ZEIT Literal
 
Die Überladung von Records wurde mit D2006 implementiert. Für die Zuweisungskompatibilität zu TDateTime müsstest Du hier auch eine entsprechende Routine zur Verfügung stellen. Wie soll sonst der Compiler wissen, wie du es gerne hättest. Aber dies bräuchte man nur Einmalig realisieren und kann es ganz normal verwenden wie myDT.Jahr := 2999 oder myDT.Monat := Dezember, etc.

QuickAndDirty 6. Aug 2009 10:16

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von mikhal
Vielleicht helfen dir auch die Bibliotheksroutinen aus SysUtils weiter: DecodeDate, EncodeDate, FormatDateTime...

Grüße
Mikhal

Sind mir alle bekannt...ich arbeite für eine Zeiterfassungs Firma...
Diese Routinen ersetzen kein Zeitliteral.

Ich bin unter anderem so genervt (also sorry wegen des Tons..) ,
weil ich eigentlich ständig Zeitliterale benötigen täte.

Zoot 6. Aug 2009 14:06

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von QuickAndDirty
Und es kotzt mich mittlerweile an das ich immer sowas in der art schrieben muss.
Delphi-Quellcode:
If Zeitdatum1-zeitdatum2 >= [i][b]Strtotime[/b][/i]('00:02') then

Wüsste nicht, was an
Delphi-Quellcode:
If Zeitdatum1-zeitdatum2 >= EncodeTime(0,2,0,0) then...
so schwierig wäre.

QuickAndDirty 6. Aug 2009 14:42

Re: Es fehlt ein ZEIT Literal
 
Zitat:

Zitat von Zoot
Wüsste nicht, was an
Delphi-Quellcode:
If Zeitdatum1-zeitdatum2 >= EncodeTime(0,2,0,0) then...
so schwierig wäre.

Nichts, nur das es doof aussieht und KEIN zur Komplierzeit zur Verfügung stehendes "LITERAL" ist.
Es mag Dir nicht aufgefallen sein aber,
- du verwendest eine FUNKTION gesucht ist ein LITERAL.
- ich selbst bin z.Z. auch gezwungen Funktionen oder RECHUNGEN zur Zeitangabe zu nutzen und empfinde dies als störend.
- die eine zitierte Zeile war einfach als ein Beispiel gedacht. Ich bin in der Lage Zeitwerte in Ausdrücken unterzubringen, dies ist nicht das Problem. Nur ist es GRUNDSÄTZLICH suboptimal im Hinblick auf die LESBARKEIT des Codes kein ZEITliteral zu verwenden.

Du benutzt EncodeTime als Zeitliteral-Ersatz für untypisierte Konstanten? Ich ziehe meinen Hut .

Ich stelle mit erschrecken fest, das sich die meisten Delphianer an dieses unkomfortable Nachbilden von Zeitliteralen bereits gewöhnt haben....

hazard999 6. Aug 2009 15:36

Re: Es fehlt ein ZEIT Literal
 
Gut das Du dich so in deinem Ton vergreifst.

Delphi kann es nicht, C# kann es nicht. JavaFX (aber auch nur FX soweit ich recherchiert habe, die Standard-Java-Api liefert sowas nicht soweit ich es in 10 min eruieren konnte auch nicht) kann sowas. Schön.

Es konnte Dir keiner helfen, weil der Compiler Out-Of-The-Box sowas nicht mit bringt.

PS: DateTime ist ein primitiver Datentyp, keine Klasse.

PSS: Bau dir halt ein LiteralToDateTime

t2 - t1 > LiteralToDateTime('2min').

Mithrandir 6. Aug 2009 17:18

Re: Es fehlt ein ZEIT Literal
 
Ich konnte mich in den vergangen Jahren nicht darüber aufregen, dass es sowas wie "Zeitliterale" nicht gibt.

Und wenn du gerne sowas wie "7h 43min 3s" schreiben möchtest.. Wer hindert dich daran, dir ne kleine Interpreter-Funktion zu schreiben, notfalls auch mithilfe von RegEX? Wenn du sowas in deinem aktuellen Projekt immer wieder brauchst, wäre das eine Alternative.

Und wenn du das auch nicht willst, dann wechsel halt die Sprache. JavaFX scheint ja echt toll zu sein.

Nachtrag: Sehe gerade, hazard999 hat das quasi schon ähnlich formuliert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 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