#include "sflconv.h"
char *
conv_date_str (
long date,
int flags,
int format,
int order,
char datesep,
int width)
Synopsis
Converts a date to a string. The format argument defines how
the date is shown:
DATE YMD COMPACT | ddmmyy
|
DATE YMD SLASH | dd/mm/yy |
DATE YMD
SPACE | dd mm yy |
DATE YMD COMMA | dd mm, yy
(DM,Y or MD,Y or Y,MD) |
DATE YM
COMPACT | mmyy |
DATE
YM SLASH | mm/yy |
DATE YM SPACE | mm yy
|
DATE MD COMPACT | ddmm |
DATE MD SLASH
| dd/mm |
DATE MD
SPACE | dd mm |
The date order
(year/month/day) is normally supplied in the order argument.
However, the date flags can override this. The flags are:
FLAG D DD AS
D | Show day without leading zero |
FLAG D MM AS M | Show month
without leading zero |
FLAG D MONTH
ABC | Show month as letters (fullname if
width > 16) |
FLAG D CENTURY | Show year as four digits |
FLAG D UPPERCASE | Month
name in uppercase |
FLAG D ORDER DMY
| Order is DMY for this date |
FLAG D ORDER MDY | Order is
MDY for this date |
FLAG D ORDER YMD
| Order is YMD for this date |
Returns a
pointer to a static area holding the string, or NULL if there
was an error (for instance, formatted date greater than width).
Source Code - (sflcvds.c)
{
static char *format_table [] = {
"ymd", "dmy", "mdy", /* DATE_YMD_COMPACT */
"y/m/d", "d/m/y", "m/d/y", /* DATE_YMD_DELIM */
"y m d", "d m y", "m d y", /* DATE_YMD_SPACE */
"y, m d", "d m, y", "m d, y", /* DATE_YMD_COMMA */
"ym", "my", "my", /* DATE_YM_COMPACT */
"y/m", "m/y", "m/y", /* DATE_YM_DELIM */
"y m", "m y", "m y", /* DATE_YM_SPACE */
"md", "dm", "md", /* DATE_MD_COMPACT */
"m/d", "d/m", "m/d", /* DATE_MD_DELIM */
"m d", "d m", "m d" /* DATE_MD_SPACE */
};
char
*format_ptr, /* Scan through format string */
delim [2], /* Delimiter character */
picture [14], /* Largest picture: dd mmmm, yyyy */
ch; /* Next char in format string */
int
index,
date_order = order; /* Order to use */
ASSERT (format >= DATE_FORMAT_FIRST && format <= DATE_FORMAT_LAST);
ASSERT (order >= DATE_ORDER_FIRST && order <= DATE_ORDER_LAST);
conv_reason = 0; /* No conversion errors so far */
if (flags & FLAG_D_ORDER_YMD)
date_order = DATE_ORDER_YMD;
else
if (flags & FLAG_D_ORDER_DMY)
date_order = DATE_ORDER_DMY;
else
if (flags & FLAG_D_ORDER_MDY)
date_order = DATE_ORDER_MDY;
/* Get index into table */
index = format * 3 + date_order - 1;
/* Now build-up picture according to format string */
strclr (picture);
for (format_ptr = format_table [index]; *format_ptr; format_ptr++)
{
ch = *format_ptr;
switch (ch)
{
case 'y':
strcat (picture, flags & FLAG_D_CENTURY? "yyyy": "yy");
break;
case 'm':
if (flags & FLAG_D_MONTH_ABC)
if (width > 16)
strcat (picture, flags & FLAG_D_UPPER? "MMMM": "mmmm");
else
strcat (picture, flags & FLAG_D_UPPER? "MMM": "mmm");
else
strcat (picture, flags & FLAG_D_MM_AS_M? "m": "mm");
break;
case 'd':
strcat (picture, flags & FLAG_D_DD_AS_D? "d": "dd");
break;
case '/':
ch = datesep; /* Use supplied date separator */
default:
delim [0] = ch;
delim [1] = 0;
strcat (picture, delim);
}
}
format_ptr = conv date pict (date, picture);
if (strlen (format_ptr) > (unsigned) width)
{
conv_reason = CONV_ERR_DATE_OVERFLOW;
return (NULL);
}
else
return (format_ptr);
}
| << | <
| > | >>
|
Copyright © 1996-2000 iMatix Corporation |