|
View previous topic :: View next topic
|
| Author |
Message |
andy12
New User
.jpg)
Joined: 30 Apr 2020 Posts: 18 Location: United States
|
|
|
|
Hi, I have a requirement where my date and timestmap is coming in this format
| Code: |
Input
12/21/2024-20.63.66.000000
12/22/2024-20.26.67.000000
12/23/2024-20.35.75.000000
12/21/2024-20.56.80.000000
|
I need to validate the hh.mm.ss and
- convert the Seconds, if its over 59 and increment it the minutes to 1 validate
- check minutes, if its over 59, then increment the hour by 1 and convert the rest as Minute
| Code: |
output
12/21/2024-21.04.06.000000
12/22/2024-20.27.07.000000
12/23/2024-20.36.15.000000
12/21/2024-20.57.20.000000
|
Thanks in advance. |
|
| Back to top |
|
 |
sergeyken
Senior Member

Joined: 29 Apr 2008 Posts: 2272 Location: USA
|
|
|
|
Please, clarify you post:
1) Do you need an advise on the sequence of operations to produce your result? Or
2) Do you need your job to be done by someone else, and you were provided with a ready-to-copy-and-paste working code?
P.S.
From my primary school days I remember: the required process is called "rounding the time value"
P.P.S.
Do you need also to update the date value after your hours value becomes 24 or more? Such as:
12/31/2024-23.59.59.999999 -> 01/01/2025-00.00.00.000000 |
|
| Back to top |
|
 |
sergeyken
Senior Member

Joined: 29 Apr 2008 Posts: 2272 Location: USA
|
|
|
|
Some hints.
How to round the seconds value
| Code: |
. . . . . . . . . . .
IFTHEN=(WHEN=(21,6,ZD,GE,+500000), add one second
OVERLAY=(18:18,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(21,6,ZD,GE,+0), reset fractions of second
OVERLAY=(21:C'000000'),
HIT=NEXT),
. . . . . . . . . . . . |
How to add one day to the date value
| Code: |
. . . . . . . . . . .
IFTHEN=(WHEN=INIT,
OVERLAY=(81:7,4,1,2,4,2)), MM/DD/YYYY->YYYYMMDD
IFTHEN=(WHEN=(12,2,ZD,GE,+24), add one day
OVERLAY=(12:12,2,ZD,SUB,+24,TO=ZDF,LENGTH=2,
1:81,8,Y4T,ADDDAYS,+1,TOGREG=Y4W(/)))
. . . . . . . . . . . |
|
|
| Back to top |
|
 |
andy12
New User
.jpg)
Joined: 30 Apr 2020 Posts: 18 Location: United States
|
|
|
|
| sergeyken wrote: |
Please, clarify you post:
1) Do you need an advise on the sequence of operations to produce your result? Or
2) Do you need your job to be done by someone else, and you were provided with a ready-to-copy-and-paste working code?
P.S.
From my primary school days I remember: the required process is called "rounding the time value"
P.P.S.
Do you need also to update the date value after your hours value becomes 24 or more? Such as:
12/31/2024-23.59.59.999999 -> 01/01/2025-00.00.00.000000 |
Hi
I tried using the below approach using MOD but i'm getting error using MOD
| Code: |
OPTION COPY INREC IFTHEN=(WHEN=(1,2,CH,GE,C'24'),
OVERLAY=(1:1,2,TO=ZD,MOD,24)),
IFTHEN=(WHEN=(3,2,CH,GE,C'60'),
OVERLAY=(3:1,2,TO=ZD,MOD,60), BUILD=(1,5,2,1,3,2,TO=ZD)),
IFTHEN=(WHEN=(5,2,CH,GE,C'60'),
OVERLAY=(5:1,2,TO=ZD,MOD,60), BUILD=(1,5,3,1,5,2))
|
Yes, i need to update my date as well accordingly. Thanks |
|
| Back to top |
|
 |
sergeyken
Senior Member

Joined: 29 Apr 2008 Posts: 2272 Location: USA
|
|
|
|
| andy12 wrote: |
| sergeyken wrote: |
Please, clarify you post:
1) Do you need an advise on the sequence of operations to produce your result? Or
2) Do you need your job to be done by someone else, and you were provided with a ready-to-copy-and-paste working code?
P.S.
From my primary school days I remember: the required process is called "rounding the time value"
P.P.S.
Do you need also to update the date value after your hours value becomes 24 or more? Such as:
12/31/2024-23.59.59.999999 -> 01/01/2025-00.00.00.000000 |
Hi
I tried using the below approach using MOD but i'm getting error using MOD
| Code: |
OPTION COPY INREC IFTHEN=(WHEN=(1,2,CH,GE,C'24'),
OVERLAY=(1:1,2,TO=ZD,MOD,24)),
IFTHEN=(WHEN=(3,2,CH,GE,C'60'),
OVERLAY=(3:1,2,TO=ZD,MOD,60), BUILD=(1,5,2,1,3,2,TO=ZD)),
IFTHEN=(WHEN=(5,2,CH,GE,C'60'),
OVERLAY=(5:1,2,TO=ZD,MOD,60), BUILD=(1,5,3,1,5,2))
|
Yes, i need to update my date as well accordingly. Thanks |
Try with my hints |
|
| Back to top |
|
 |
andy12
New User
.jpg)
Joined: 30 Apr 2020 Posts: 18 Location: United States
|
|
|
|
| sergeyken wrote: |
| andy12 wrote: |
| sergeyken wrote: |
Please, clarify you post:
1) Do you need an advise on the sequence of operations to produce your result? Or
2) Do you need your job to be done by someone else, and you were provided with a ready-to-copy-and-paste working code?
P.S.
From my primary school days I remember: the required process is called "rounding the time value"
P.P.S.
Do you need also to update the date value after your hours value becomes 24 or more? Such as:
12/31/2024-23.59.59.999999 -> 01/01/2025-00.00.00.000000 |
Hi
I tried using the below approach using MOD but i'm getting error using MOD
| Code: |
OPTION COPY INREC IFTHEN=(WHEN=(1,2,CH,GE,C'24'),
OVERLAY=(1:1,2,TO=ZD,MOD,24)),
IFTHEN=(WHEN=(3,2,CH,GE,C'60'),
OVERLAY=(3:1,2,TO=ZD,MOD,60), BUILD=(1,5,2,1,3,2,TO=ZD)),
IFTHEN=(WHEN=(5,2,CH,GE,C'60'),
OVERLAY=(5:1,2,TO=ZD,MOD,60), BUILD=(1,5,3,1,5,2))
|
Yes, i need to update my date as well accordingly. Thanks |
Try with my hints |
Thanks. I dont need to convert my date. Just Hh:mm:ss is major |
|
| Back to top |
|
 |
sergeyken
Senior Member

Joined: 29 Apr 2008 Posts: 2272 Location: USA
|
|
|
|
| Code: |
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(81:7,4,1,2,4,2, MM/DD/YYYY->YYYYMMDD
28:C'<-',X,1,26)), copy original timestamp
IFTHEN=(WHEN=(21,6,ZD,GE,+500000), add one second
OVERLAY=(18:18,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(21,6,ZD,GE,+0), reset fractions of second
OVERLAY=(21:C'000000'),
HIT=NEXT),
IFTHEN=(WHEN=(18,2,ZD,GE,+60), add one minute
OVERLAY=(18:18,2,ZD,SUB,+60,TO=ZDF,LENGTH=2,
15:15,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(15,2,ZD,GE,+60), add one hour
OVERLAY=(15:15,2,ZD,SUB,+60,TO=ZDF,LENGTH=2,
12:12,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(12,2,ZD,GE,+24), add one day
OVERLAY=(12:12,2,ZD,SUB,+24,TO=ZDF,LENGTH=2,
1:81,8,Y4T,ADDDAYS,+1,TOGREG=Y4W(/)))
SORT FIELDS=COPY
OUTREC BUILD=(1,80)
END
//* |
| Code: |
//SORTIN DD *
02/28/2024-00.00.00.900000
02/28/2024-23.50.59.800000
02/28/2024-23.59.59.700000
02/28/2023-23.59.59.600000
12/31/2024-23.59.59.500000
02/28/2024-00.00.00.111111
02/28/2024-23.50.59.222222
02/28/2024-23.59.59.333333
02/28/2023-23.59.59.444444
12/31/2024-23.59.59.000000
//*-+----1----+----2----+----3----+----4----+----5----+----6 |
| Code: |
********************************* TOP OF DATA ******************
02/28/2024-00.00.01.000000 <- 02/28/2024-00.00.00.900000
02/28/2024-23.51.00.000000 <- 02/28/2024-23.50.59.800000
02/29/2024-00.00.00.000000 <- 02/28/2024-23.59.59.700000
03/01/2023-00.00.00.000000 <- 02/28/2023-23.59.59.600000
01/01/2025-00.00.00.000000 <- 12/31/2024-23.59.59.500000
02/28/2024-00.00.00.000000 <- 02/28/2024-00.00.00.111111
02/28/2024-23.50.59.000000 <- 02/28/2024-23.50.59.222222
02/28/2024-23.59.59.000000 <- 02/28/2024-23.59.59.333333
02/28/2023-23.59.59.000000 <- 02/28/2023-23.59.59.444444
12/31/2024-23.59.59.000000 <- 12/31/2024-23.59.59.000000
******************************** BOTTOM OF DATA **************** |
|
|
| Back to top |
|
 |
andy12
New User
.jpg)
Joined: 30 Apr 2020 Posts: 18 Location: United States
|
|
|
|
| sergeyken wrote: |
| Code: |
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(81:7,4,1,2,4,2, MM/DD/YYYY->YYYYMMDD
28:C'<-',X,1,26)), copy original timestamp
IFTHEN=(WHEN=(21,6,ZD,GE,+500000), add one second
OVERLAY=(18:18,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(21,6,ZD,GE,+0), reset fractions of second
OVERLAY=(21:C'000000'),
HIT=NEXT),
IFTHEN=(WHEN=(18,2,ZD,GE,+60), add one minute
OVERLAY=(18:18,2,ZD,SUB,+60,TO=ZDF,LENGTH=2,
15:15,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(15,2,ZD,GE,+60), add one hour
OVERLAY=(15:15,2,ZD,SUB,+60,TO=ZDF,LENGTH=2,
12:12,2,ZD,ADD,+1,TO=ZDF,LENGTH=2),
HIT=NEXT),
IFTHEN=(WHEN=(12,2,ZD,GE,+24), add one day
OVERLAY=(12:12,2,ZD,SUB,+24,TO=ZDF,LENGTH=2,
1:81,8,Y4T,ADDDAYS,+1,TOGREG=Y4W(/)))
SORT FIELDS=COPY
OUTREC BUILD=(1,80)
END
//* |
| Code: |
//SORTIN DD *
02/28/2024-00.00.00.900000
02/28/2024-23.50.59.800000
02/28/2024-23.59.59.700000
02/28/2023-23.59.59.600000
12/31/2024-23.59.59.500000
02/28/2024-00.00.00.111111
02/28/2024-23.50.59.222222
02/28/2024-23.59.59.333333
02/28/2023-23.59.59.444444
12/31/2024-23.59.59.000000
//*-+----1----+----2----+----3----+----4----+----5----+----6 |
| Code: |
********************************* TOP OF DATA ******************
02/28/2024-00.00.01.000000 <- 02/28/2024-00.00.00.900000
02/28/2024-23.51.00.000000 <- 02/28/2024-23.50.59.800000
02/29/2024-00.00.00.000000 <- 02/28/2024-23.59.59.700000
03/01/2023-00.00.00.000000 <- 02/28/2023-23.59.59.600000
01/01/2025-00.00.00.000000 <- 12/31/2024-23.59.59.500000
02/28/2024-00.00.00.000000 <- 02/28/2024-00.00.00.111111
02/28/2024-23.50.59.000000 <- 02/28/2024-23.50.59.222222
02/28/2024-23.59.59.000000 <- 02/28/2024-23.59.59.333333
02/28/2023-23.59.59.000000 <- 02/28/2023-23.59.59.444444
12/31/2024-23.59.59.000000 <- 12/31/2024-23.59.59.000000
******************************** BOTTOM OF DATA **************** |
|
Thanks sergeyken. Appreciate your time and help. |
|
| Back to top |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1430 Location: Bamberg, Germany
|
|
|
|
Another method:
| Code: |
OPTION COPY
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(41:7,4,1,2,4,2,81:18,4,UFF,ADD,+5,TO=ZDF,LENGTH=4,
50:(((12,2,ZD,MUL,+3600),ADD,
15,2,ZD,MUL,+60),ADD,
81,3,ZD),TO=ZDF,LENGTH=6)),
IFTHEN=(WHEN=INIT,
OVERLAY=(57:50,6,ZD,DIV,+86400,TO=ZDF,LENGTH=1, * Days
50:50,6,ZD,MOD,+86400,TO=ZDF,LENGTH=6)),
IFTHEN=(WHEN=INIT,
OVERLAY=(58:50,6,ZD,DIV,+3600,TO=ZDF,LENGTH=2, * Hours
50:50,6,ZD,MOD,+3600,TO=ZDF,LENGTH=6)),
IFTHEN=(WHEN=INIT,
OVERLAY=(60:50,6,ZD,DIV,+60,TO=ZDF,LENGTH=2, * Minutes
62:50,6,ZD,MOD,+60,TO=ZDF,LENGTH=2)), * Seconds
IFTHEN=(WHEN=(57,1,ZD,EQ,+1),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+1,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=(57,1,ZD,EQ,+2),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+2,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=(57,1,ZD,EQ,+3),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+3,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=(57,1,ZD,EQ,+4),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+4,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=NONE,
BUILD=(1,26,X,C'->',X,41,8,Y4T,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6))
END |
Output sample:
| Code: |
12/21/2024-99.99.99.999999 -> 12/25/2024-04.40.40.000000
12/22/2024-20.26.67.987654 -> 12/22/2024-20.27.08.000000
12/23/2024-20.35.75.000000 -> 12/23/2024-20.36.15.000000
12/21/2024-20.56.80.000000 -> 12/21/2024-20.57.20.000000
12/31/2024-23.59.59.990000 -> 01/01/2025-00.00.00.000000 |
|
|
| Back to top |
|
 |
sergeyken
Senior Member

Joined: 29 Apr 2008 Posts: 2272 Location: USA
|
|
|
|
| Joerg.Findeisen wrote: |
Another method:
| Code: |
OPTION COPY
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(41:7,4,1,2,4,2,81:18,4,UFF,ADD,+5,TO=ZDF,LENGTH=4,
50:(((12,2,ZD,MUL,+3600),ADD,
15,2,ZD,MUL,+60),ADD,
81,3,ZD),TO=ZDF,LENGTH=6)),
IFTHEN=(WHEN=INIT,
OVERLAY=(57:50,6,ZD,DIV,+86400,TO=ZDF,LENGTH=1, * Days
50:50,6,ZD,MOD,+86400,TO=ZDF,LENGTH=6)),
IFTHEN=(WHEN=INIT,
OVERLAY=(58:50,6,ZD,DIV,+3600,TO=ZDF,LENGTH=2, * Hours
50:50,6,ZD,MOD,+3600,TO=ZDF,LENGTH=6)),
IFTHEN=(WHEN=INIT,
OVERLAY=(60:50,6,ZD,DIV,+60,TO=ZDF,LENGTH=2, * Minutes
62:50,6,ZD,MOD,+60,TO=ZDF,LENGTH=2)), * Seconds
IFTHEN=(WHEN=(57,1,ZD,EQ,+1),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+1,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=(57,1,ZD,EQ,+2),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+2,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=(57,1,ZD,EQ,+3),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+3,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=(57,1,ZD,EQ,+4),
BUILD=(1,26,X,C'->',X,41,8,Y4T,ADDDAYS,+4,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6)),
IFTHEN=(WHEN=NONE,
BUILD=(1,26,X,C'->',X,41,8,Y4T,TOGREG=Y4W(/),
58,6,ZD,EDIT=(STT.TT.TTS),SIGNS=(-,-,.,.),+0,ZD,LENGTH=6))
END |
|
It really works, but...
9 conditional statements used, with tons of comparisons of non-obvious constants with non-obvious fields.
| Quote: |
| It is more important the programs to be understandable by a human, rather than runnable by a computer! |
 |
|
| Back to top |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1430 Location: Bamberg, Germany
|
|
|
|
| sergeyken wrote: |
It really works, but...
9 conditional statements used, with tons of comparisons of non-obvious constants with non-obvious fields.
| Quote: |
| It is more important the programs to be understandable by a human, rather than runnable by a computer! |
 |
It is 6 comparisons if you omit the days 2..4, nothing more than your solution.  |
|
| Back to top |
|
 |
andy12
New User
.jpg)
Joined: 30 Apr 2020 Posts: 18 Location: United States
|
|
|
|
| Thanks everyone for pitching in your inputs and thoughts. Appreciate it. |
|
| Back to top |
|
 |
|
|
 |
All times are GMT + 6 Hours |
|