The ifx_gl_convert_datetime() function
The ifx_gl_convert_datetime() function converts a date/time string to its internal date/time representation.
Syntax
#include <ifxgls.h>
...
int ifx_gl_convert_datetime(datetime, datetimestr, format)
mi_datetime *datetime;
char *datetimestr;
char *format;
- datetime
- A pointer to the variable that holds the internal date/time representation that ifx_gl_convert_datetime() creates from the datetimestr date/time string.
- datetimestr
- A pointer to the first character of the date/time string that the function converts to its internal date/time representation.
- format
- A pointer to the format string that determines how to interpret the datetimestr date/time string. For more information, see Format string.
Valid in client application | Valid in DataBlade® UDR |
---|---|
Yes | Yes |
Usage
The ifx_gl_convert_datetime() function converts the date/time string that datetimestr references to its internal date/time representation, which the function stores in the datetime argument. The function uses the format that the format string specifies to scan the datetimestr date/time string.
The datetime argument is a pointer to a datetime (dtime_t) value.
The datetime argument is a pointer to an mi_datetime value.
Format string
- If the DBTIME environment variable is set, the function scans according to DBTIME.
- If the GL_DATETIME environment variable is set, the function scans datetimestr according to the specification of GL_DATETIME.
- Otherwise, the function obtains the format from the d_t_fmt subcategory of the LC_TIME category in the current GLS locale file.
Contents of format string | Conversion action taken |
---|---|
One or more white space characters | The function skips over the corresponding number
of white space characters in the datetimestr date/time
string (unless the formatting directive begins with the minus-sign
modifier), up to the first character that is not white space or until
no more characters can be scanned. White space characters are characters
that the blank class of the LC_CTYPE category in the current locale
defines. To execute a series of formatting directives composed of %n, %t, white space characters, or any combination, the function scans up to the first character that is not white space (which remains unscanned) or until no more characters can be scanned. |
A valid formatting directive | The function performs the specified conversion on the date/time element in the datetimestr date/time string. It replaces the formatting directive with an internal representation of the date/time element for conversion to the datetime value. There must be white space or other nonalphanumeric characters between any two formatting directives. |
Ordinary characters | The function must find the same ordinary character
in the datetimestr date/time string. Any mismatch
generates an error. The differing and subsequent characters in datetimestr remain
unscanned. You cannot include white space characters as ordinary characters. |
%[modifiers][flags][maximum_width][.minimum_width]type_specifier
Argument | See |
---|---|
modifiers | Modified formatting directives |
flags | Field width |
minimum_width | Field width |
maximum_width | Field width |
type_specifier | Valid type specifiers |
Valid type specifiers
- %a
- Matches the day of the week. You can specify the abbreviated weekday name, which the abday subcategory of the LC_TIME defines or specify the full weekday name, which the day subcategory of LC_TIME defines. The directive ignores case when it matches weekday names.
- %A
- Same as %a.
- %b
- Matches the month. You can specify the abbreviated month name, which the abmon subcategory of LC_TIME defines or specify the full month name, which the mon subcategory of LC_TIME defines. The directive ignores case when it matches month names.
- %B
- Same as %b.
- %c
- Indicates use of the format that the d_t_fmt subcategory of the LC_TIME defines for the scan.
- %C
- Matches the century number in the range 0 - 99. Leading zeros are permitted but not required. If %C is used without %y, it is ignored.
- %d
- Matches the day of the month as a decimal number in the range 1 - 31. Leading zeros are permitted but not required.
- %D
- Is the same as %m/%d/%y.
- %e
- Same as %d.
- %F[n]
- Matches the microsecond as a decimal number in the range 0 - 999999. Leading zeros are permitted but not required. An optional precision specification can follow the %F. This n value must be 1 - 5.
- %h
- Same as %b.
- %H
- Matches the hour (24-hour clock) as a decimal number in the range 0 - 23. Leading zeros are permitted but not required.
- %I
- Matches the hour (12-hour clock) as a decimal number in the range 0 - 12. Leading zeros are permitted but not required. If %I is used without %p, the function assumes a.m.
- %j
- Matches the day of the year as a decimal number in the range 1 - 366. Leading zeros are permitted but not required.
- %M
- Matches the minute as a decimal number in the range 0 - 59. Leading zeros are permitted but not required.
- %n
- Matches any white space that the blank class of the LC_CTYPE category defines.
- %p
- Matches the equivalent of either a.m. or p.m. that the am_pm subcategory of LC_TIME defines.
- %r
- Indicates use of the format that the t_fmt_ampm subcategory of LC_TIME defines.
- %R
- Matches the time as %H:%M.
- %S
- Matches the second as a decimal number in the range 0- 61. Leading zeros are permitted but not required.
- %t
- Matches any white space that the space class of the LC_CTYPE category defines.
- %T
- Matches the time as %H:%M:%S.
- %u
- Matches the weekday as a decimal number in the range 1- 7, with 0 representing Sunday. Leading zeros are permitted but not required.
- %w
- Matches the weekday as a decimal number in the range 0 - 6, with 0 representing Sunday. Leading zeros are permitted but not required.
- %x
- Indicates use of the format that the d_fmt subcategory of LC_TIME defines.
- %X
- Indicates use of the format that the t_fmt subcategory of LC_TIME defines.
- %y
- Matches the year within century as a decimal number in the range 0 - 99. Leading zeros are permitted but not required. If %y is used without %C and the month and day of month are part of the datetimestr string, the function determines the century from the DBCENTURY environment variable.
- %Y
- Matches the year, including the century, as a decimal number in the range 0 - 9999.
- %%
- Matches the % symbol.
If the format string contains redundant formatting directives, directives that are closer to the end of the format string take precedence over the directives that are closer to the beginning of the format string.
If a formatting directive does not correspond to any of the preceding directives, the behavior of the conversion is undefined.
Modified formatting directives
- O
- Use alternative locale-specific digits in dates and times.
LC_TIME Subcategory: alt_digits
- %Od
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the day of the month. Leading zeros are permitted but not required.
- %Oe
- Same as %Od.
- %OH
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the hour (24-hour clock).
- %OI
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the hour (12-hour clock).
- %Om
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the month.
- %OM
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the minutes.
- %OS
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the seconds.
- %Ow
- Uses the alternative digits that the alt_digits subcategory of LC_TIME defines to match the weekday as a number (Sunday=0).
- %iF[n]
- Indicates use of the Informix® DBTIME format %F. An optional precision specification, n, can follow F. This n value must be 1 - 5.
- %iy
- Indicates use of the Informix® DBDATE format Y2. Both 98 and 1998 are interpreted as 1998 (or the century that DBCENTURY indicates).
- %iY
- Indicates use of the Informix® DBDATE format Y4. Both 98 and 1998 are interpreted as 1998 (or the century that DBCENTURY indicates).
Field width
[- | 0][maximum_width][.minimum_width]
[- | 0]
- Indicates field justification.
If the specification begins with a minus sign (-), the function assumes that the field is left-aligned. In this case, the value that is being read must start with a digit and can be trailed with spaces. The field can be preceded with leading spaces unless the first character is 0. If the specification begins with 0, the function assumes that the field is right-aligned. Any padding to the left must use zeros. Otherwise, the function assumes that the datetimestr string is right-aligned.
maximum_width
- A decimal value that specifies the maximum number of characters to read from the datetimestr date/time string.
minimum_width
- Indicates an optional minimum field width. The minimum field width has the format of a period (.) followed by a decimal number. The minimum_width decimal number represents the minimum number of characters to read. If the function reads fewer than minimum_width characters, it generates an error (unless you specified left justification). When you specify left justification, the function skips any trailing white space to read the required number of characters.
For the %Fn format, n overrides the minimum field width. If n is greater than the maximum field width, the maximum field width is increased to n. If n is not 1 - 5, an error is returned.
Locale information
The LC_TIME category of the current locale affects the behavior of this function because it provides the locale-specific information for the scan of the datetimestr date/time string.
Return values
- 0
- The function was successful.
- -1
- The function was not successful, and the error number is set to indicate the cause. See the Errors section.
Errors
- IFX_GL_EBADF
- A formatting directive is invalid.
- IFX_GL_EFRACRANGE
- Fraction of second is out of bounds.
- IFX_GL_ESECONDRANGE
- Second is out of bounds.
- IFX_GL_EHOURRANGE
- Hour is out of bounds.
- IFX_GL_EMINUTERANGE
- Minute is out of bounds.
- IFX_GL_EDAYRANGE
- Day number is out of bounds.
- IFX_GL_EWKDAYRANGE
- Weekday number is out of bounds.
- IFX_GL_EYDAYRANGE
- Year day number is out of bounds.
- IFX_GL_EMONTHRANGE
- Month number is out of bounds.
- IFX_GL_EYEARRANGE
- Year number is out of bounds.
- IFX_GL_BADFRAC
- Fraction could not be scanned.
- IFX_GL_BADSECOND
- Second could not be scanned.
- IFX_GL_BADMINUTE
- Minute could not be scanned.
- IFX_GL_BADHOUR
- Hour could not be scanned.
- IFX_GL_BADDAY
- Month (as a number) could not be scanned.
- IFX_GL_BADWKDAY
- Weekday (as a number) could not be scanned.
- IFX_GL_BADYDAY
- Day of year (as a number) could not be scanned.
- IFX_GL_BADMONTH
- Month could not be scanned.
- IFX_GL_BADYEAR
- Year could not be scanned.