📄 strlib.c
字号:
/*----------------------------------------------------------------------------* * FUNCTION: Get login password. * Argument: * char *string - 字符串. * Return : * TRUE. *----------------------------------------------------------------------------*/int get_loginpwd(char *strbuf){ static char arrbuf[]= {" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}; unsigned int buf[6],i,num1,num2; rtrim(strbuf); while(strlen(strbuf) < 6) strcat(strbuf," "); for(i=0; i < 6; i++) buf[i]=0; i=0; while(i<6 && *(strbuf+i) !='\0') { buf[i]=*(strbuf+i); i++; } num1=buf[0]%8; buf[0]=buf[0]/8; num1=num1<<5; for(i=1;i<6;i++) { num2=buf[i]%8; buf[i]=buf[i]/8; buf[i]=buf[i]|num1; num1=num2<<5; } buf[0]=buf[0]|num1; for(i=0;i<6;i++) { num1=(buf[i]+i)%63; *(strbuf+i)=arrbuf[num1]; } return(TRUE);}/****************************************************************************** * <第三章> 日期和时间函数. * ******************************************************************************//*----------------------------------------------------------------------------* * FUNCTION: Get System_Time(HHMMSS), Such as 110201. * Argument: * char *hhmmss - 字符串. * int format - SYM_COLON':'|SYM_CHINESE. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *get_time(char *hhmmss,int format){ long time(), now; struct tm *tms, *localtime(); time(&now); tms = localtime(&now); if( format & (SYM_COLON|SYM_CHINESE) ) { if( format & SYM_CHINESE ) sprintf(hhmmss,"%.2d时%.2d分%.2d秒",tms->tm_hour,tms->tm_min,tms->tm_sec); else sprintf(hhmmss,"%.2d:%.2d:%.2d",tms->tm_hour,tms->tm_min,tms->tm_sec); } else { sprintf(hhmmss,"%.2d%.2d%.2d",tms->tm_hour,tms->tm_min,tms->tm_sec); } return hhmmss;}/*----------------------------------------------------------------------------* * FUNCTION: Get System_Date(YYMMDD), Such as 930701. * Argument: * char *string - 字符串. * int format - YMD: yymmdd YYMD:yyyymmdd MDY:mmddyy MDYY:mmddyyyy * or SYM_SLASH'/',SYM_HYPHEN,SYM_DOT | SYM_CHINESE * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *get_date(char *date,int format){ char sym,tmp[30]; long time(), now; struct tm *tms, *localtime(); time(&now); tms = localtime(&now); if( format & SYM_CHINESE_UPPER ) { if( format & YMD ) sprintf(tmp,"%2.2d%.2d%.2d",tms->tm_year%100,tms->tm_mon+1,tms->tm_mday); else /* default is 'yyyymmdd' */ sprintf(tmp,"%.4d%.2d%.2d",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday); strcpy(date,to_chinese_date(tmp,format)); } else if( format & SYM_CHINESE_LOWER ) { if( format & YMD ) sprintf(date,"%2.2d年%.2d月%.2d日",tms->tm_year%100,tms->tm_mon+1,tms->tm_mday); else if( format & YYMD ) sprintf(date,"%.4d年%.2d月%.2d日",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday); else if( format & MDY ) sprintf(date,"%.2d月%.2d日%2.2d年",tms->tm_mon+1,tms->tm_mday,tms->tm_year%100); else if( format & MDYY ) sprintf(date,"%.2d月%.2d日%.4d年",tms->tm_mon+1,tms->tm_mday,1900+tms->tm_year); else /* default is 'yyyymmdd' */ sprintf(date,"%.4d年%.2d月%.2d日",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday); } else if( format & (SYM_SLASH|SYM_HYPHEN|SYM_DOT) ) { if( format & SYM_SLASH ) sym = '/'; else if( format & SYM_HYPHEN ) sym = '-'; else if( format & SYM_DOT ) sym = '.'; else sym = '/'; if( format & YMD ) sprintf(date,"%2.2d%c%.2d%c%.2d",tms->tm_year%100,sym,tms->tm_mon+1,sym,tms->tm_mday); else if( format & YYMD ) sprintf(date,"%.4d%c%.2d%c%.2d",1900+tms->tm_year,sym,tms->tm_mon+1,sym,tms->tm_mday); else if( format & MDY ) sprintf(date,"%.2d%c%.2d%c%2.2d",tms->tm_mon+1,sym,tms->tm_mday,sym,tms->tm_year%100); else if( format & MDYY ) sprintf(date,"%.2d%c%.2d%c%.4d",tms->tm_mon+1,sym,tms->tm_mday,sym,1900+tms->tm_year); else /* default is 'yyyymmdd' */ sprintf(date,"%.4d%c%.2d%c%.2d",1900+tms->tm_year,sym,tms->tm_mon+1,sym,tms->tm_mday); } else { if( format & YMD ) sprintf(date,"%2.2d%.2d%.2d",tms->tm_year%100,tms->tm_mon+1,tms->tm_mday); else if( format & YYMD ) sprintf(date,"%.4d%.2d%.2d",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday); else if( format & MDY ) sprintf(date,"%.2d%.2d%2.2d",tms->tm_mon+1,tms->tm_mday,tms->tm_year%100); else if( format & MDYY ) sprintf(date,"%.2d%.2d%.4d",tms->tm_mon+1,tms->tm_mday,1900+tms->tm_year); else /* default is 'yyyymmdd' */ sprintf(date,"%.4d%.2d%.2d",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday); } return date;}/*----------------------------------------------------------------------------* * FUNCTION: 测试字符串是否是合法日期. * Argument: * char *date - 字符串. * Return : * TRUE - 是合法的日期. * FALSE - 不是合法的日期. *----------------------------------------------------------------------------*/date_test(char *date){ int year,mon,day; if( (strlen(date) == 8 || strlen(date) == 6) && numstr_test(date) ) { date_dton(date,&year,&mon,&day); if(mon>=1&&mon<=12&&day>=1&&day<=date_mdays(year,mon)) return(TRUE); } return(FALSE);}/*----------------------------------------------------------------------------* * FUNCTION: 字符日期转成数值的年月日. * Argument: * char *date - 字符串. * int *year - 年. * int *mon - 月. * int *day - 日. * Return : * TRUE - 是合法的日期. * FALSE - 不是合法的日期. *----------------------------------------------------------------------------*/date_dton(char *date,int *year,int *mon,int *day){ if( strlen(date) == 6 ) /* yymmdd */ { *year=subnum(date,0,2)+1900; *mon =subnum(date,2,2); *day =subnum(date,4,2); } else if( strlen(date) == 8 ) /* yyyymmdd */ { *year=subnum(date,0,4); *mon =subnum(date,4,2); *day =subnum(date,6,2); } else { *year=*mon=*day=0; return(FALSE); } return(TRUE);}/*----------------------------------------------------------------------------* * FUNCTION: 找出某月的最大天数 * Argument: * int year - 年. * int mon - 月. * Return : * int - 最大天数. *----------------------------------------------------------------------------*/int month_maxdayset[]={0,31,28,31,30,31,30,31,31,30,31,30,31};date_mdays(int year,int mon){ int days; days=month_maxdayset[mon]; if(mon==2) days+=(date_ydays(year)-365); return(days);}/*----------------------------------------------------------------------------* * FUNCTION: 找出某年的总天数. * Argument: * int year - 年. * Return : * int - 最大天数. *----------------------------------------------------------------------------*/date_ydays(int year){ int days; if(year%4==0&&year%100!=0) days=366; else days=365; return(days);}/*----------------------------------------------------------------------------* * FUNCTION: 计算两日期相隔天数. * Argument: * char *d2 - 字符串日期. * char *d1 - 字符串日期. * Return : * TRUE - 相隔天数. * FALSE - 不是合法的日期,或d2小于d1. *----------------------------------------------------------------------------*/date_diffdays(char *d2,char *d1){ char date[9],date1[9],date2[9]; int year1,year2,mon1,mon2,day1,day2,days,cunt,sign=FALSE; if(!date_test(d1)||!date_test(d2)) return(FALSE); strcpy(date1,d1); strcpy(date2,d2); if(strcmp(date1,date2)>0) { strcpy(date,date1); strcpy(date1,date2); strcpy(date2,date); sign=TRUE; } date_dton(date1,&year1,&mon1,&day1); date_dton(date2,&year2,&mon2,&day2); for(cunt=1;cunt<mon2;cunt++) day2+=date_mdays(year2,cunt); for(cunt=1;cunt<mon1;cunt++) day1+=date_mdays(year1,cunt); days=day2-day1; for(;year1<year2;year1++) days+=date_ydays(year1); if(sign) days=-days; return(days);}/*----------------------------------------------------------------------------* * FUNCTION: 计算星期几(0...6). * Argument: * char *date - 字符串日期. * Return : * int - 星期几(0...6). *----------------------------------------------------------------------------*/date_wdays(char *date){ int mod; mod=date_diffdays(date,"19800106"); return(mod>0?mod%7:7-(-mod)%7);}/*----------------------------------------------------------------------------* * FUNCTION: 数值年月日转成字符. * Argument: * int year - 年. * int mon - 月. * int day - 日. * char *date - 字符串. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *date_ntod(int year,int mon,int day,char *date){ itoa(year,date,48,4); itoa(mon,date+4,48,2); itoa(day,date+6,48,2); return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期往前进(后退)几年. * Argument: * char *string - 日期字符串. * int years - 年数. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *date_ychange(char *date,int years){ char buf[5]; itoa(subnum(date,0,4)+years,buf,48,4); memcpy(date,buf,4); return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期往前进(后退)几月. * Argument: * char *string - 日期字符串. * int mons - 月数. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *date_mchange(char *date,int mons){ char buf[5]; int year,mon; year=subnum(date,0,4); mon =subnum(date,4,2)+mons; if(mon>0) { while(mon>12) { mon-=12; year++; } } else { while(mon<1) { mon+=12; year--; } } itoa(year,buf,48,4); memcpy(date,buf,4); itoa(mon,buf,48,2); memcpy(date+4,buf,2); return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期往前进(后退)几天 * Argument: * char *string - 日期字符串. * int days - 天数. * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *date_dchange(char *date,int days){ int year,mon,day,ydays; date_dton(date,&year,&mon,&day); day+=days; if(day>0) { while(day>(ydays=date_mdays(year,mon))) { mon++; if(mon>12) { mon=1; year++; } day-=ydays; } } else { while(day<=0) { mon--; if(mon<1) { mon=12; year--; } day+=date_mdays(year,mon); } } date_ntod(year,mon,day,date); return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期转成中文形式. * Argument: * char *rq - 'yyyymmdd' -> 一九九零年十月二十五日 * 'yymmdd' -> 九零年十月二十五日 * int format - SYM_CHINESE, SYM_CHINESE_UPPER * Return : * char * - 字符串指针. *----------------------------------------------------------------------------*/char *to_chinese_date(char *rq,int format){ char mrq[30],date_str[23],ni[10],trq[30],*ptr; int yu,ri,i; memset(mrq,0,sizeof(mrq)); if(date_test(rq)==FALSE) return(mrq); strcpy(date_str,"零一二三四五六七八九十"); if( format & SYM_CHINESE_LOWER ) { if( strlen(rq) == 6 ) /* yymmdd */ { strcpy(mrq,substr(rq,0,2)); strcat(mrq,"年"); strcpy(mrq+4,substr(rq,2,2)); strcat(mrq,"月"); strcat(mrq,rq+4); strcat(mrq,"日"); } else /* yyyymmdd */ { strcpy(mrq,substr(rq,0,4)); strcat(mrq,"年"); strcpy(mrq+6,substr(rq,4,2)); strcat(mrq,"月"); strcat(mrq,rq+6); } } else { if( strlen(rq) == 6 ) { i=subnum(rq,0,2); if( i >= 90 ) strcpy(trq,"19"); else strcpy(trq,"20"); strcat(trq,rq); } else { strcpy(trq,rq); } strcpy(ni,substr(trq,0,4)); yu=subnum(trq,4,2); ri=atoi(trq+6); for(i=0;i<4;i++) strcpy(mrq+i*2,substr(date_str,(*(ni+i)-48)*2,2)); strcat(mrq,"年"); ptr=strchr(mrq,'\0'); if(yu<=10) strcpy(ptr,substr(date_str,yu*2,2)); else { strcat(ptr,"十"); ptr=strchr(mrq,'\0'); strcpy(ptr,substr(date_str,(yu-10)*2,2)); } strcat(mrq,"月"); ptr=strchr(mrq,'\0'); switch(ri/10) { case 0: break; case 2: case 3: strcpy(ptr,substr(date_str,(ri/10)*2,2)); case 1: strcat(ptr,"十"); ptr=strchr(mrq,'\0'); break; } if(ri%10) strcpy(ptr,substr(date_str,(ri%10)*2,2)); strcat(ptr,"日"); if( (strlen(rq) == 6) && (!(format & SYM_YYMD)) ) { strcpy(trq,mrq+4); strcpy(mrq,trq); } } return(mrq);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -