Ciao a tutti ed un ringraziamento in anticipo a quanti mi dedicheranno un po' di tempo.
Ho questo ambiente:
s.o. i5/OS v. 7.3 in IBM Power System
compilatore ILE COBOL.
Siamo in ambito assicurativo dove la durata della copertura di una polizza decorre da una certa data e ora ad un'altra data e ora.
Devo calcolare la durata in MESI fra due date espresse nel formato timestamp (di lunghezza 19).
In WS ho i seguenti campi:
77 W-TZE-I FORMAT TIME "%H.%M.%S" VALUE "00.00.00".
03 W-DURADA FORMAT DATE "%Y%m%d".
03 W-DURAA FORMAT DATE "%Y%m%d".
03 W-DA FORMAT TIMESTAMP SIZE 19.
03 W-AL FORMAT TIMESTAMP SIZE 19.
03 W-MESI PIC S9(5).
Il valore di W-DURADA è "2020-01-01"
Il valore di W-DURAA è "2022-01-01"
Calcolo:
MOVE W-DURADA TO W-DA
MOVE W-TZE-I TO W-DA
MOVE W-DURAA TO W-AL
MOVE W-TZE-I TO W-AL
MOVE FUNCTION SUBTRACT-DURATION(W-AL MINUTES 1) TO W-AL
Tolgo un minuto per garantirmi il calcolo corretto quando le due date hanno mm e gg uguali (01/01/2020 - 01/01/2022)
a questo punto
il valore di W-DA è '2020-01-01-00.00.00'
il valore di W-AL è '2021-12-31-23.59.00'
e procedo al calcolo della durata:
COMPUTE W-MESI = 1 +
FUNCTION FIND-DURATION(W-DA W-AL MONTHS)
Il valore di W-MESI risulta 01363 invece di 24. Perchè?
Se il calcolo lo faccio direttamente fra W-DURADA e W_DURAA il valore che ottengo è 25 (12 mesi del '20, 12 mesii del '21' e Gennaio del '22 anche se per un solo giorno).
Possibile che abbia beccato un bug del compilatore o c'è qualche recondita regola che non conosco?
Grazie 1.000.000 a tutti.