⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sflcvds.c

📁 短小精悍的C语言标准函数库。提供450个以上的可移植的算法和工具代码。
💻 C
字号:
/*  ----------------------------------------------------------------<Prolog>-
    Name:       sflcvds.c
    Title:      Converts a date to a string
    Package:    Standard Function Library (SFL)

    Written:    1995/12/17  iMatix SFL project team <sfl@imatix.com>
    Revised:    1997/10/21

    Copyright:  Copyright (c) 1996-2000 iMatix Corporation
    License:    This is free software; you can redistribute it and/or modify
                it under the terms of the SFL License Agreement as provided
                in the file LICENSE.TXT.  This software is distributed in
                the hope that it will be useful, but without any warranty.
 ------------------------------------------------------------------</Prolog>-*/

#include "prelude.h"                    /*  Universal header file            */
#include "sflconv.h"                    /*  Prototypes for functions         */


/*  ---------------------------------------------------------------------[<]-
    Function: conv_date_str

    Synopsis: Converts a date to a string.  The format argument defines how
    the date is shown:
    <TABLE>
        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
    </TABLE>

    The date order (year/month/day) is normally supplied in the order
    argument.  However, the date flags can override this.  The flags are:
    <TABLE>
        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
    </TABLE>

    Returns a pointer to a static area holding the string, or NULL if there
    was an error (for instance, formatted date greater than width).
    ---------------------------------------------------------------------[>]-*/

char *
conv_date_str (
    long date,
    int  flags,
    int  format,
    int  order,
    char datesep,
    int  width)
{
    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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -