📄 date.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 + -