You may read and write to the CLOCK$ device to get or set the current date and time.
Warning: Be careful when writing to the CLOCK$ device! There seems to be no parameter checking at all!
Example:
/* */
/* Sample REXX code to read from the CLOCK$ device */
/* */
/* The CLOCK$ device returns the time and date in 6 bytes with the */
/* following format: */
/* */
/* Byte 1-2 : No. of days since 01.01.1980 in INTEL format */
/* Byte 3 : Minutes */
/* Byte 4 : Hours */
/* Byte 5 : Hundreds of Seconds */
/* Byte 6 : Seconds */
/* */
/* Note: */
/* */
/* To change the date or time via the CLOCK$ device, you can also */
/* write to the CLOCK$ device. This is very useful to set the date */
/* to today +/- n days. But use this technique with care! */
/* */
/* get the current time with the TIME() function */
/* (only needed to test the results) */
timeResult = time( "L" )
/* read the current time from the CLOCK$ device */
clockResult = CharIn( "CLOCK$", , 6 )
/* close the CLOCK$ device */
/* Note that you MUST close the device between */
/* reading and writing to it! */
call stream "CLOCK$", "c", "CLOSE"
/* date("B") for the 01.01.1980 */
/* (only needed to test the results) */
date01_01_1980 = 722814
/* convert the date */
iDate = c2d( translate( '21', substr( clockResult,1, 2 ), '12' ) )
/* convert the time */
iHours = right( c2d( substr( clockResult, 4, 1 ) ), 2, "0" )
iMinutes = right( c2d( substr( clockResult, 3, 1 ) ), 2, "0" )
iSeconds = right( c2d( substr( clockResult, 6, 1 ) ), 2, "0" )
iHundreds = right( c2d( substr( clockResult, 5, 1 ) ), 2, "0" )
/* show the results */
say "Today is the day no " || idate || " after the 01.01.1980."
say "(According to DATE() the number must be: " || ,
date("B") - date01_01_1980 || ", DATE(U) returns " || ,
date( "U" ) || ")."
say "Time is " || iHours || ":" || ,
iMinutes || ":" || ,
iSeconds || ":" || ,
iHundreds ,
"(time(L) reports: " || timeResult || ")"
exit