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

📄 date.c

📁 一个很好用的解析
💻 C
字号:
#include <ctype.h>#include <string.h>#include <stdio.h>#include <time.h>#include <stdlib.h>#include <inttypes.h>#include "date.h"/*********************************************************************** Date*********************************************************************/static char *_DateDay[7]={    "Sun","Mon","Tue","Wed","Thu","Fri","Sat"};static char *_DateMonth[12]={    "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};static int32_t _DateTimeBias=0;static char _DateTimeBiasStr[6]="";abyss_bool DateToString(TDate *tm,char *s){    if (mktime(tm)==(time_t)(-1))    {        *s='\0';        return FALSE;    };    sprintf(s,"%s, %02d %s %04d %02d:%02d:%02d GMT",_DateDay[tm->tm_wday],tm->tm_mday,                _DateMonth[tm->tm_mon],tm->tm_year+1900,tm->tm_hour,tm->tm_min,tm->tm_sec);    return TRUE;}abyss_boolDateToLogString(TDate * const tmP,                char *  const s) {    time_t t;    t = mktime(tmP);    if (t != (time_t)(-1)) {        TDate d;        abyss_bool success;        success = DateFromLocal(&d, t);        if (success) {            sprintf(s, "%02d/%s/%04d:%02d:%02d:%02d %s",                    d.tm_mday, _DateMonth[d.tm_mon],                    d.tm_year+1900, d.tm_hour, d.tm_min, d.tm_sec,                    _DateTimeBiasStr);            return TRUE;        }    }    *s = '\0';    return FALSE;}abyss_boolDateDecode(const char *  const dateString,           TDate *       const tmP) {    int rc;    const char * s;    uint32_t n;    s = &dateString[0];    /* Ignore spaces, day name and spaces */    while ((*s==' ') || (*s=='\t'))        ++s;    while ((*s!=' ') && (*s!='\t'))        ++s;    while ((*s==' ') || (*s=='\t'))        ++s;    /* try to recognize the date format */    rc = sscanf(s, "%*s %d %d:%d:%d %d%*s", &tmP->tm_mday, &tmP->tm_hour,                &tmP->tm_min, &tmP->tm_sec, &tmP->tm_year);    if (rc != 5) {        int rc;        rc = sscanf(s, "%d %n%*s %d %d:%d:%d GMT%*s",                    &tmP->tm_mday,&n,&tmP->tm_year,                    &tmP->tm_hour, &tmP->tm_min, &tmP->tm_sec);        if (rc != 5) {            int rc;            rc = sscanf(s, "%d-%n%*[A-Za-z]-%d %d:%d:%d GMT%*s",                        &tmP->tm_mday, &n, &tmP->tm_year,                        &tmP->tm_hour, &tmP->tm_min, &tmP->tm_sec);            if (rc != 5)                return FALSE;        }    }        /* s points now to the month string */    s += n;    for (n = 0; n < 12; ++n) {        char * p;        p =_DateMonth[n];        if (tolower(*p++) == tolower(*s))            if (*p++ == tolower(s[1]))                if (*p == tolower(s[2]))                    break;    }    if (n == 12)        return FALSE;    tmP->tm_mon = n;    /* finish the work */    if (tmP->tm_year > 1900)        tmP->tm_year -= 1900;    else {        if (tmP->tm_year < 70)            tmP->tm_year += 100;    }    tmP->tm_isdst = 0;    return (mktime(tmP) != (time_t)(-1));}int32_t DateCompare(TDate *d1,TDate *d2){    int32_t x;    if ((x=d1->tm_year-d2->tm_year)==0)        if ((x=d1->tm_mon-d2->tm_mon)==0)            if ((x=d1->tm_mday-d2->tm_mday)==0)                if ((x=d1->tm_hour-d2->tm_hour)==0)                    if ((x=d1->tm_min-d2->tm_min)==0)                        x=d1->tm_sec-d2->tm_sec;    return x;}abyss_boolDateFromGMT(TDate *d,time_t t) {    TDate *dx;    dx=gmtime(&t);    if (dx) {        *d=*dx;        return TRUE;    };    return FALSE;}abyss_bool DateFromLocal(TDate *d,time_t t){    return DateFromGMT(d,t+_DateTimeBias*2);}abyss_boolDateInit() {    time_t t;    TDate gmt,local,*d;    time(&t);    if (DateFromGMT(&gmt,t)) {        d=localtime(&t);        if (d) {            local=*d;            _DateTimeBias =                (local.tm_sec-gmt.tm_sec)+(local.tm_min-gmt.tm_min)*60                +(local.tm_hour-gmt.tm_hour)*3600;            sprintf(_DateTimeBiasStr, "%+03d%02d",                    _DateTimeBias/3600,(abs(_DateTimeBias) % 3600)/60);            return TRUE;        };    }    return FALSE;}

⌨️ 快捷键说明

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