📄 ctime.c
字号:
/* Taken from dietlibc. */#include <db.h>static long int timezone;struct tm { int tm_sec; /* Seconds. [0-60] (1 leap second) */ int tm_min; /* Minutes. [0-59] */ int tm_hour; /* Hours. [0-23] */ int tm_mday; /* Day. [1-31] */ int tm_mon; /* Month. [0-11] */ int tm_year; /* Year - 1900. */ int tm_wday; /* Day of week. [0-6] */ int tm_yday; /* Days in year.[0-365] */ int tm_isdst; /* DST. [-1/0/1]*/ long int tm_gmtoff; /* Seconds east of UTC. */ const char *tm_zone; /* Timezone abbreviation. */};#if 0struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of dst correction */};#endif/* days per month -- nonleap! */const short __spm[12] = { 0, (31), (31+28), (31+28+31), (31+28+31+30), (31+28+31+30+31), (31+28+31+30+31+30), (31+28+31+30+31+30+31), (31+28+31+30+31+30+31+31), (31+28+31+30+31+30+31+31+30), (31+28+31+30+31+30+31+31+30+31), (31+28+31+30+31+30+31+31+30+31+30), };static const char days[] = "Sun Mon Tue Wed Thu Fri Sat ";static const char months[] = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ";static void num2str(char *c,int i) { c[0]=i/10+'0'; c[1]=i%10+'0';}static int __isleap(int year) { /* every fourth year is a leap year except for century years that are * not divisible by 400. *//* return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); */ return (!(year%4) && ((year%100) || !(year%400)));}char *asctime_r(const struct tm *t, char *buf) { /* "Wed Jun 30 21:49:08 1993\n" */ *(int*)buf=*(int*)(days+(t->tm_wday<<2)); *(int*)(buf+4)=*(int*)(months+(t->tm_mon<<2)); num2str(buf+8,t->tm_mday); if (buf[8]=='0') buf[8]=' '; buf[10]=' '; num2str(buf+11,t->tm_hour);// if (buf[11]=='0') buf[11]=' '; buf[13]=':'; num2str(buf+14,t->tm_min); buf[16]=':'; num2str(buf+17,t->tm_sec); buf[19]=' '; num2str(buf+20,(t->tm_year+1900)/100); num2str(buf+22,(t->tm_year+1900)%100); buf[24]='\n'; return buf;}/* seconds per day */#define SPD 24*60*60struct tm *gmtime_r(const time_t *timep, struct tm *r) { time_t i; register time_t work=*timep%(SPD); r->tm_sec=work%60; work/=60; r->tm_min=work%60; r->tm_hour=work/60; work=*timep/(SPD); r->tm_wday=(4+work)%7; for (i=1970; ; ++i) { register time_t k=__isleap(i)?366:365; if (work>=k) work-=k; else break; } r->tm_year=i-1900; r->tm_yday=work; r->tm_mday=1; if (__isleap(i) && (work>58)) { if (work==59) r->tm_mday=2; /* 29.2. */ work-=1; } for (i=11; i && (__spm[i]>work); --i) ; r->tm_mon=i; r->tm_mday+=work-__spm[i]; return r;}struct tm* localtime_r(const time_t* t, struct tm* r) { time_t tmp; struct timezone tz; gettimeofday(0, &tz); timezone=tz.tz_minuteswest*60L; tmp=*t+timezone; return gmtime_r(&tmp,r);}char *ctime_r(const time_t *timep, char *buf) { struct tm tmp; localtime_r(timep, &tmp); asctime_r(&tmp, buf); return buf;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -