PDA

View Full Version : Sekunden auf Datum 01.01.1980 addieren



Seiten : [1] 2

co_steffl
19-03-10, 14:11
Hallo i5 Fans

ich suche einen Weg um eine Anzahl Sekunden auf ein Datum zu addieren.
In RPG natürlich, sorry!

Gegeben Anzahl Sekunden z.B. 831456732

Gegeben Datum/Timestamp
01.01.1980 00:00 Uhr

Gesucht Datum/Timestamp + Anzahl Sekunden für neues Datum mit Timestamp

Komme nicht so recht weiter. Weis nicht wie ich ansetzen soll?
Gibt es evtl. auch SQL Funktion?

Gruß
co_steffl

BenderD
19-03-10, 14:51
%date und %seconds heißen deine Freunde

D*B


Hallo i5 Fans

ich suche einen Weg um eine Anzahl Sekunden auf ein Datum zu addieren.
In RPG natürlich, sorry!

Gegeben Anzahl Sekunden z.B. 831456732

Gegeben Datum/Timestamp
01.01.1980 00:00 Uhr

Gesucht Datum/Timestamp + Anzahl Sekunden für neues Datum mit Timestamp

Komme nicht so recht weiter. Weis nicht wie ich ansetzen soll?
Gibt es evtl. auch SQL Funktion?

Gruß
co_steffl

B.Hauser
19-03-10, 16:28
zunächst einmal eine Anmerkung:
Sekunden können immer nur auf eine Timestamp oder eine Zeit, nicht jedoch direkt auf ein Datum addiert werden.

Konvertierung eines Datums in eine Zeitmarke erfolgt mit der RPG Funktion %Timestamp(). Konvertierung einer Zeitmarke in ein Datum erfolgt mit der RPG-Funktion %Date. Um Sekunden auf eine Zeitmarke addieren zukönnen muss der numerische Wert in einen "rechenbaren" Zeitwert mit Hilfe der Funktion %Seconds() konvertiert werden.


/Free
NewDate = Date(%TimeStamp(MyDate) + %Seconds(NumWert));
/End-Free

In SQL ist das etwas anders, hier muss keine Funktion zur Konvertierung von Zeitwerten verwendet werden, stattdessen wird die Zeiteinheit (z.B. SECONDS) auf neuhochdeutsch hinter den numerischen Wert gestellt. Aber auch bei SQL gilt: Sekunden können nur zu Zeitmarken oder Zeiten addiert werden:



/Free
Exec SQL Set :NewDate = Date(Timestamp_ISO(:MyDate)
+ :NumWert Seconds);
/End-Free


Birgitta

Fuerchau
19-03-10, 16:36
Kleine Anmerkung:

Ich frage mich, ob der 1.1.1980 so richtig ist. Windwos/Unix/C-Funktions-Zeitmarken verwenden den 1.1.1970 als Basis.
Ausserdem ist der Sekundenwert auf UTC gerechnet sodass ggf. noch die Zeitzone dazukommt.

co_steffl
22-03-10, 10:05
Hallo zusammen,

danke f.d. Tipps. Es funktioniert mit %Date + %Seconds.

Danke und Gruß
Co_steffl

boonkelz
27-06-16, 06:24
Hallo zusammen,
ich habe folgendes Problem
ich muss in RPG in ein Feld JRNTMSTMP I 19,0
einen Timestamp im UTC Format schreiben.
Das soll dann so ausschauen
JRNTMSTMP . . . . . . . . : 1453446003


Ich habe es so probiert --> funkte nicht -->
JRNTMSTMP = %dec(%TimeStamp() + %Seconds(5))
JRN_JRNTMSTMP = %dec(%TimeStamp(sysDatumIso) + %Seconds(5));


Bitte um Hilfe
Vielen Dank Hannes

Fuerchau
27-06-16, 08:31
In etwa so:
%dec(%char(%date():*iso0):8:0) * 1000000 + %dec(%char(%time():*iso0):6:0)

Die Alternative ist die Definition eines Timestamps im ISO-Format in einer DS und eine Redefinition der einzelnen Teile mit Jahr, Monat, Tag, Stunde, Minute, Sekunde und Nanosekunden.
Anschließend den Wert aus den Einzelfeldern berechnen.

camouflage
27-06-16, 08:51
Versteh ich nicht, funktioniert doch.



dcl-s myTmestmp timestamp;
dcl-s mydecstmp packed(20:0);

myTmeStmp = %timestamp();
myTmeStmp += %seconds(5);
mydecStmp = %dec(myTmeStmp);

oder so (kurz):
mydecStmp = %dec(%timestamp() + %seconds(5));




Anm. V7R1 und Ergänzung num. Feld (muss 20 Stellen sein!)

Fuerchau
27-06-16, 09:53
Wohl dem der V7 hat;-). Es gibt da noch so ein paar ältere Release wo das noch nicht geht. Da stören dann noch die Trennzeichen. Deshalb gibts ja auch das Format %char(%date():*ISO0) und das wegzubekommen.

boonkelz
28-06-16, 08:35
Super Vielen Dank, die 20 Stellen waren schuld, aber ein Problem habe ich noch:
Ich muss das in ein UTC Format bringen, der Wert sollte dann etwa so aussehen


1456768378



JRNTMSTMP I 19,0 173 180

Vielen Dank
Hannes