Lizette,
hereby two possible solutions with REXX and SORT.
In both cases I assumed TS in DB2 format YYYY-MM-DD-HH:MI:SS.uuuuuu
/* REXX */
NUMERIC DIGITS 18
PARSE ARG TS_STA TS_END
DT_STA = LEFT(TS_STA,4) !! SUBSTR(TS_STA,6,2) !! SUBSTR(TS_STA,9,2)
TM_STA = SUBSTR(TS_STA,12)
DT_END = LEFT(TS_END,4) !! SUBSTR(TS_END,6,2) !! SUBSTR(TS_END,9,2)
TM_END = SUBSTR(TS_END,12)
DT_STA_B = DATE("B",DT_STA,"S")
DT_END_B = DATE("B",DT_END,"S")
SAY DT_STA_B DT_END_B
TM_STA_B = TIME_BIN(TM_STA)
TM_END_B = TIME_BIN(TM_END)
SAY TM_STA_B TM_END_B
DT_DIFF_B = (DT_END_B - DT_STA_B) * 1440 * 60
TM_DIFF_B = TM_END_B - TM_STA_B
DELTA_TS = DT_DIFF_B + TM_DIFF_B
SAY DT_DIFF_B TM_DIFF_B DELTA_TS
EXIT
/*-------------------------------------------------------------------*/
TIME_BIN: PROCEDURE
IN = ARG(1)
PARSE VAR IN HH":"MI":"SS"."US
VAL = HH * 3600 + MI * 60 + SS + US/1000000
RETURN VAL
If you want you can solve the problem with SORT too (sorry for comments in
italian).
It's only a sample and the result value is at col 200 with edit
SSSSSSSSSS.uuuuuu.
//ST010 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
2020-12-02-14:15:22.9320392020-12-02-14:15:31.499675
2020-12-02-23:59:59.0000012020-12-03-00:00:01.000001
/*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
*---------------------------------------------------------------------*
*IL FORMATO TS INTERNO ZOS (8 BYTES) E' CALCOLATO COME DIFFERENZA
*RISPETTO AL 1900-01-01-00.00.00.000000
*DEI 64 BITS IL BIT 51 RAPPRESENTA UN US (MICROSECONDO)
*DA CUI LA NECESSITA' DI DIVIDERE PER 4096 ALLA FINE
*---------------------------------------------------------------------*
*MODALITA' DI LAVORO:
* 1. COSTRUIAMO DAI TS IN FORMATO DB2 ESTERNO DELLE DATE IN FORMATO
* YYYYMMGG (FORMATO SORT=Y4T). LO POSIZIONIAMO A PARTIRE COLONNA 101
* 2. RICAVIAMO DA QUESTI DELLE DATE IN FORMATO GIULIANO YYYYGGG E LE
* POSIZIONIAMO A PARTIRE COLONNA 120
* 3. CALCOLIAMO CON DELLE MOLTIPLICAZIONI I VALORI DEI DELTA DEI DUE TS
* RISPETTO AL TS DI BASE (1900-01-01-00.00.00.000000)
* SOTTRAENDO 1900 DALL'ANNO E 1 DAL GIORNO.
* I FATTORI MOLTIPLICATIVI SONO QUELLI DEI MICROSECONDI * 4096
* CALCOLATI PER 1 SECONDO, 1 MINUTO, 1 ORA, 1 GIORNO ED UN ANNO.
* 4. CALCOLIAMO LA DIFFERENZA TRA I DUE TOD DI 8 BYTES E DIVIDIAMO
* IL VALORE PER 4096 PER OTTENERLO IN MICROSECONDI. PONIAMO IL
* VALORE A COLONNA 200 CON 10 INTERI (SECONDI) E 6 DECIMALI
* (MICROSECONDI).
*---------------------------------------------------------------------*
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(101:1,4,6,2,9,2,27,4,32,2,35,2)), IN YYYYMMGG
IFTHEN=(WHEN=INIT,
OVERLAY=(120:101,8,Y4T,TOJUL=Y4T,109,8,Y4T,TOJUL=Y4T)), IN JUL
IFTHEN=(WHEN=INIT,
*YYYY*XX_IN_UN_ANNO +
*GGG*XX_IN_UN_GIORNO +
*HH*XX_IN_UN_ORA +
*MM*XX_IN_UN_MINUTO +
*SS*XX_IN_UN_SECONDO +
*US*XX_IN_UN_SECONDO
*DOVE XX=US_IN_UN_SECONDO * 4096
OVERLAY=(150:(120,4,ZD,ADD,-1900),MUL,+129171456000000000,ADD, 1 Y
(124,3,ZD,ADD,-1),MUL,+353894400000000,ADD, 1 D
12,2,ZD,MUL,+14745600000000,ADD, 1 H
15,2,ZD,MUL,+245760000000,ADD, 1 M
18,2,ZD,MUL,+4096000000,ADD, 1 S
21,6,ZD,MUL,+4096,TO=BI,LENGTH=8, 1 US
160:(127,4,ZD,ADD,-1900),MUL,+129171456000000000,ADD, 1 Y
(131,3,ZD,ADD,-1),MUL,+353894400000000,ADD, 1 D
38,2,ZD,MUL,+14745600000000,ADD, 1 H
41,2,ZD,MUL,+245760000000,ADD, 1 M
44,2,ZD,MUL,+4096000000,ADD, 1 S
47,6,ZD,MUL,+4096,TO=BI,LENGTH=8)), 1 US
IFTHEN=(WHEN=INIT,
OVERLAY=(200:(160,8,BI,SUB,150,8,BI),DIV,+4096,
TO=BI,LENGTH=8))
SORT FIELDS=COPY
OUTREC FIELDS=(1,207,200,8,BI,EDIT=('TTTTTTTTTT.TTTTTT'))
/*
Of course, please double check.
Best regards.
Max
<
https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
Mail
priva di virus.
www.avast.com
<
https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
Il giorno ven 9 apr 2021 alle ore 08:22 WalterPachl <
pa...@chello.at> ha
scritto: