ODTIM

Updated November 2018; see History

xcall ODTIM, stringfmt, odate, otime, flags

ODTIM.SBR performs the reverse function of IDTIM.SBR, i.e. it converts an internal format date and/or time to a string format. Its formatting options are much more extensive, however, than the formats allowed by IDTIM

Parameters

stringfmt  (String)  [out]

the formated date/time string is returned here.

odate  (Num)  [in]

should contain the internal (aka "separated" – see IDTIM for details) date to be formatted. 0 is taken to mean the current date.

otime  (Num)  [in]

should contain the internal time—seconds since midnight—to be displayed, with 0 indicating either the current time (if odate is also 0), or midnight (if odate <> 0). As there are 86400 seconds in 24 hours, values greater than or equal to 86400 may produced undefined results; see Comments below.

flags  (Num)  [in]

must specify a sum of desired formatting options from the following table:

Value

Meaning

&h00000001

Omit date from output (ignore all other date related flags)

&h00000002

Output the day of the week

&h00000004

Use the full name of the day of the week; else use the first three characters

&h00000008

Output the month as a number (1-12) and ignore flag &h0010.

&h00000010

Output the full name of the month; else use the first character abbreviation

&h00000020

Output four digit year; else two digit year

&h00000040

Output the month first, then the day; else the day first, then the month

&h00000080

If &h0100 not specified, use spaces to separate the parts of the date, as in 17 Jul 2013. If &h0100 is also specified (i.e. &h0080 + &h0100) then use separator character defined in the language definition file (LDF).

&h00000100

If &h0080 not specified, use slashes to separate the parts of the date, as in 7/17/03. If &h0080 is also specified, use LDF separator character (see above).

&h00000200

Omit time from output (ignore all other time related flags)

&h00000400

Omit seconds from the time output

&h00000800

Use 12 hour time format with AM/PM; else use 24 hour format

&h00001000

Do not output a separator between the hours and minutes (also see &h0020000)

&h00002000

Use colon as the time separator; else use the character defined in the LDF

&h00004000

Suppress leading zeroes from numeric portion of date.

&h00020000

Do not output a separator between the minutes and the seconds

&h00200000

Do not output date punctuation

&h00800000

Do not output the day

&h01000000

Do not output the month

&h02000000

Do not output the year

Hex-Decimal Values

 

Comments

Two special flags values, which override the bit settings in the table above, are also recognized:

•   flags = 0 produces output of the form: 17-Jul-03 13:15:58.

•   flags = -1 (&hffffffff) produces output of the form: Monday, July 17, 2013 01:15:58 PM

In both of the above special cases, the LDF settings will be applied as appropriate.

As of 6.5.1650.1 (see History), otime values >= 86400 are handled as follows:

•   If the date output is omitted (flags bit &h0001 set) and 24 hour format is requested (flags bit &h0800 not set), then otime is treated as a cumulative value with  no particular upper limit, e.g. otime = 455571 results in 126:32:51, which might represent an elapsed time for some activity. 

•   If the date is to be included in the output (flags bit &h0001 not set), then the odate value specified will be increased by one day for each multiple of 86400 in otime, with otime reduced accordingly.  For example, if odate = 0 and otime = 86401, it will display tomorrow's date and 00:00:01 as the time.

•   If the date output is omitted and 12 hour format requested (flags bits &h0801) the result is undefined.

See Also

The system function ODTIM() provides a somewhat simpler syntax for the same operation.

History

2018 October, A-Shell 6.5.1650:  special handling of otime >=86400; see Comments.