PDA

View Full Version : %TIMESTAMP



Sulla
15-03-06, 13:34
Hallo liebes Forum!

Wie bekomme ich eigentlich mit %TIMESTAMP nur die Stunden und Minuten (4-stellig) heraus?

Lg und Dank im Voraus!

Fuerchau
15-03-06, 13:53
D ActTime T
D ActHour 5I 0
D ActMinute 5I 0

ActTime=%timestamp();
ActHour=%hour(ActHour);
ActMinute=%minutes(ActHour);

Sulla
15-03-06, 14:02
Aber gibt es eine direkt BIF, wo ich die Stunden und Minuten direkt herausbekomme?

Danke Vielmals für die rasche Antwort!

Fuerchau
15-03-06, 14:16
Durch Kombination:

%hour(%timestamp())
%minutes(%timestamp())

Fuerchau
15-03-06, 14:23
War doch nicht ganz korrekt, nun das Richtige:

%subst(%char(%time()):1:5);

Das Zeitformat hängt allerdings von den H-Bestimmungen ab.

Sulla
15-03-06, 14:27
Danke Vielmals und noch einen schönen Tag!

Fuerchau
15-03-06, 14:45
Es geht noch einfacher:

ActHour = %subdt(%time:*h);
ActMinute= %subdt(%time:*mn);

Zu beachten ist allerdings folgendes:
Durch die 2 getrennten Aufrufe kann es zur vollen Stunde zu falschen Angaben kommen.
Wenn die Stunde um z.B. 14:59:59.999 abgerufen wird und die Minute um 15:00:00.001 !
Es ist also besser eine Hilfsvariable zu nehmen, auch wenn das nur 1 Mal alle paar Millionen Aufrufe passieren könnte.

Sulla
15-03-06, 14:59
Genau diese Lösung schwebte mir vor!

Super!

Danke noch einmal!

Lg

B.Hauser
15-03-06, 16:15
Ich würde das Ganze über eine Datenstruktur lösen.
Wenn diese Datenstruktur zudem noch lokal in einer Prozedur definiert ist, kann man sie sogar mit dem System-Wert initialisieren. Ansonsten sollte man mit der Built-in-Funktion die System-Zeit ermitteln. Bei einer Datenstruktur hat man außerdem nur einen einzigen Aufruf!



D DSTime DS
D Time T inz(*Sys)
D TimeK 5A Overlay(Time)
D TimeA 8A Overlay(Time)
D HoursN 2S 0 Overlay(TimeA)
D MinutesN 2S 0 Overlay(TimeA: 4)
*---------------------------------------------------
/Free
Time = %Time();
*INLR = *On;
/End-Free


Birgitta