MC Press Online

Saturday, May 27th

Last updateThu, 25 May 2017 10am

You are here: Home ARTICLES IT Infrastructure Operating Systems IBM i (OS/400, i5/OS) TechTip: %DATE, %TIME, and %TIMESTAMP

Operating Systems / IBM i (O5/400, i5/OS)

TechTip: %DATE, %TIME, and %TIMESTAMP

SUPPORT MC PRESS - VISIT OUR SPONSORS

NEW BOOK!

IBM i Security Administration and Compliance


ORDER YOUR COPY

*******************

Click for this Month's

Bookstore Special Deals

The %DATE, %TIME, and %TIMESTAMP built-in functions were new in V5R1. %CHAR has been enhanced to allow date, time, and timestamp parameters, with an optional format. They can be used to accomplish several things.

%DATE, %TIME, and %TIMESTAMP can be used without parameters to get the current system date, time, or timestamp:

   currentTime = %timestamp();


%DATE and %TIME can be used with a timestamp parameter to get the date or time part of the timestamp:

   if %date(timestamp) > %date();  // if the date in the timestamp is greater than today's date


%DATE, %TIME, and %TIMESTAMP can be used with a numeric or character parameter, and an optional format, to return a date, time, or timestamp:

   date = %date(num : *mdy);
   date = %time(char : *iso0);


%DATE and %TIME can be added together to return a timestamp:

   timestamp = %date(numdate : *ymd) + %time(numtime : *iso);


%CHAR with a date, time, or timestamp parameter can convert those types to character, in any required format:

   charValue = %char(date : *eur);


Here's an example of using these built-in functions to get a non-standard timestamp in the form "mm/dd/yy hh:mm:ss AM."

   charTimestamp = %char(%date(ts) : *MDY/)               // mm/dd/yy
                 + ' '
                 + %char(%time(ts) : *HMS:)               // hh:mm:ss
                 + ' '
                 + %subst(%char(%time(ts): *USA): 7 : 2); // AM or PM



By the way, if you're wondering how to convert a date, time, or timestamp value to numeric, it's quite easy in V5R2 by combining %INT or %DEC with %CHAR:

   numDate = %int(%char(date : *eur0);                //  ddmmyyyy
   numTS = %dec(%char(timestamp : *iso0) : 20 : 0);   //
yyyymmddhhmmssuuuuuu


In V5R1, for dates or times, you can use the C function atoll, like this:

   H bnddir('QC2LE')
   D atoll           pr            20i 0 extproc('atoll')
   D  string                         *   value options(*string)
    /free
          numDate = atoll(%char(date : *eur0));


Barbara Morris can be reached by email at This email address is being protected from spambots. You need JavaScript enabled to view it..

BLOG COMMENTS POWERED BY DISQUS