[Gelöst] Millisekunden aus Time-Variable entfernen

12. April 2013 22:15

Hier eine Aufgabe für alle, getreu dem Motto: "Unser Code soll schöner werden"! :-)

Folgendes:
Ich habe auf einer Page eine Time-Variable (CurrTime). Dieser weise ich bei Pageaufruf die aktuelle Uhrzeit zu.
Angezeigt wird dann z.B.: 22:11:26,814

Aufgaben:
1. Ich möchte in dieser Variable aber nur diesen Wert ohne Millisekunden abspeichern: 22:11:26 oder der kaufmännisch gerundete Wert: 22:11:27.
2. Die Lösung muss mit allen Windows-Ländereinstellungen funktionieren.
3. Es geht mir um das Ändern der Wertes, nicht um dessen Darstellung.

Meine Idee:
Code:
EVALUATE(CurrTime,PADSTR(FORMAT(TIME,0,9),8),9);


Edit - das geht schonmal kürzer (danke McClane):
Code:
EVALUATE(CurrTime,FORMAT(TIME,8,9),9);


Wer kennt eine bessere?
PS: Ist keine RTC- oder 2013-spezifische Frage - die Frage hätte ich genauso für NAV 5.0 stellen können.

Re: Millisekunden aus Time-Variable entfernen

12. April 2013 22:38

schon mal
Code:
Result := ROUNDDATETIME(DateTimeToRound, Precision);


probiert ?:

Gruß, Fiddi

Re: Millisekunden aus Time-Variable entfernen

12. April 2013 23:09

fiddi hat geschrieben:schon mal
Code:
Result := ROUNDDATETIME(DateTimeToRound, Precision);


probiert ?:

Nein - aber der erwartet DateTime statt nur Time. Wenn ich das jetzt noch berücksichtige - ist es dann noch kürzer als die erste (mittlerweile ergänzte) Lösung?

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:23

Kannst du (oder natürlich jeder, der mag) mal nachsehen, ob die Zeit bei dir noch stimmt? Bei mir kommt eine Zeit heraus, die zwei Stunden zu früh liegt. Sprich: wenn TIME=12:00:00, dann CurrTime=10:00:00.

Getestet mit 2009R2 CC und NAV5, Windows 7 Ultimate 64, Zeitzone ist UTC+1 (Amsterdam, Berlin usw.). Stelle ich die Zeitzone auf UTC, sind TIME und CurrTime gleich.

Edit: gleiches (falsches) Ergebnis unter Win XP SP3 und NAV2009R2.

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:31

Hast du das versehentlich mit DateTime- statt Time-Variablen getestet?

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:35

Nein. Das würde ohne Datum beim evaluate auch in einen Fehler laufen, oder nicht?

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:36

Code:
NewTime := DT2TIME(ROUNDDATETIME(CURRENTDATETIME,1000L))


Sollte eigentlich funktionieren, ohne den Umweg über Textvariablen.

Gruß, Fiddi

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:41

fiddi hat geschrieben:
Code:
NewTime := DT2TIME(ROUNDDATETIME(CURRENTDATETIME,1000L))


Sollte eigentlich funktionieren, ohne den Umweg über Textvariablen.

Tut es, vielen Dank! :-)
Und welche Lösung soll ich nun bevorzugen? :roll:
Glaubst du, es gibt unterschiede hinsichtlich Performance?
(Normalerweise kaue ich nicht so intensiv an so einer Teilfrage herum, aber diesmal habe ich Zeit dafür und Lust darauf und will es genau wissen).

@McClane: Funktioniert denn wenigstens das bei dir ohne Abweichung?

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:45

Ob die Zeit ohne Millisekunden und im richtigen Format ist? Ja, das klappt. Angesehen habe ich mir US- und arabisches Format, wobei ich im arabischen hinter der Uhrzeit ein 'Ö' erhalte. Aber das kann man wohl auf den falschen Zeichensatz schieben. Und den werde ich NICHT umstellen :mrgreen:

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:53

Also die Uhrzeit ist jetzt wieder richtig? Und wenn du meinen zweiten Vorschlag nimmst, ist sie wieder falsch?
Dann wäre fiddis Weg wohl der "universal richtigere", weil downgradefähig.

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 13:59

Nein, deine Versionen klappen beide nicht, da der Fehler (minus 2 Stunden) schon im Format auftritt, sobald ich format(TIME,X,9) (wichtig ist die 9) aufrufe. Nehme ich Null statt der Neun, kommt die richtige Zeit heraus. Ist ja vielleicht ein Fehler, der mit 2013 korrigiert wurde?

Fiddis Lösung klappt.

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 14:21

(Normalerweise kaue ich nicht so intensiv an so einer Teilfrage herum, aber diesmal habe ich Zeit dafür und Lust darauf und will es genau wissen).


Nun da wir nicht den Umweg über Textvariablen gehen müssen, die u.U. durch andere Formatierung oder in einem anderen Sprachraum zu Fehlern führen könnte, schließen wir zunächst einmal eine mögliche Fehlerquelle aus.
Da DateTime soviel ich weiß intern ein Dezimalwert ist, sollte das mit 2 einfachen Rundungsoperationen getan sein.

Gruß, Fiddi

Re: Millisekunden aus Time-Variable entfernen

13. April 2013 15:03

Jepp, überzeugt.
Vielen Dank nochmal!