Books by Bryan Meyers

Programming in RPG IV

Control Language Programming for IBM i

RPG IV Jump Start

Power Tips for RPG IV

VisualAge for RPG by Example

 
Free Format Alternatives to TIME Print E-mail

Q. In fixed format RPG IV, I used the TIME operation code to get the current date and time; but TIME is not supported by free format. You mentioned that the %DATE, %TIME, and %TIMESTAMP functions can replace TIME, but I'm not sure how to use them for this purpose.

In my programs, I create a data structure like this:

D                 DS
D Dtime                         14  0
D  Wdate                         8  0 Overlay(Dtime)
D  Wtime                         6  0 Overlay(Dtime:*Next)

I've been using TIME to assign a value to Dtime, then I use Wtime and Wdate to assign values to work fields. How can I do this in free format?

A. If you do not specify a value for the %DATE, %TIME, and %TIMESTAMP functions they will return the current date, time, or timestamp. Then, it's a simple matter to convert that value to a number in your data structure. Here's one way to do it:

D                 DS
D Dtime                         14  0
D  Wdate                         8  0 Overlay(Dtime)
D  Wtime                         6  0 Overlay(Dtime:*Next)  

  // V5R3:
     Wtime = %Dec(%Time():*ISO);
     Wdate = %Dec(%Date():*ISO);             

  // V5R2:
     Wtime = %Dec(%Char(%Time():*ISO0):6:0);
     Wdate = %Dec(%Char(%Date():*ISO0):8:0);

Or, if you make a small change to the data structure:

D                 DS
D Dtime                         20  0
D  Wdate                         8  0 Overlay(Dtime)
D  Wtime                         6  0 Overlay(Dtime:*Next)

  // V5R3:
     Dtime = %Dec(%Timestamp());

  // V5R2:
     Dtime = %Dec(%Char(%Timestamp():*ISO0):20:0);