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

📄 ctime.c

📁 在sco unix 下显示前n天或后n天日期的处理程序。 printf("功能: 时间戳与时间格式字符串的转换程序 ") printf(" -i 输入的参数为时间戳 ") printf("
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
#include <sys/stat.h>

usage(char *procname)
{
printf("Usage:%s -i itime|-s [[[yyyy]mm]dd]hhmmss|-t|-h [-o|-O [format]] [-x days]\n",procname);
printf("功能: 时间戳与时间格式字符串的转换程序\n");
printf("	-i 输入的参数为时间戳\n");
printf("	-s 输入的参数为格式化时间\n");
printf("	-t 输入的时间取当前系统时间\n");
printf("	-x 输入的时间增加或减少的天数\n");
printf("	-o 输出的时间为时间戳格式\n");
printf("	-O 输出的时间为格式化时间\n");
printf("	-h 帮助文件-查看[format]如何定义,例 %s -h\n",procname);
printf("范例:1  取当前日期的前2天的时间显示 %s -t -x -2\n",procname);
printf("      2  取20030101的前5天的时间显示 %s -s 20030101000000 -x -5\n",procname);
printf("      3  取20031231的后5天的时间显示 %s -s 20031231000000 -x 5 -O \"%%D %%T\"\n",procname);
printf("      4  取时间戳为1089619417的时间显示 %s -i 1089619417 \n",procname);
printf("      5  取时间戳为1089619417的后4天的时间显示 %s -i 1089619417 -x 4 \n",procname);
printf("\n作者:俞旋 2003-05-12\n");
printf("修改日期: 2004-07-12\n");
exit(1);
}

help(char *procname)
{
printf("Usage : %s -i itime|-s [[[yyyy]mm]dd]hhmmss|-t [-o|-O [format]] [-h] [-x days]  \n",procname);
printf("格式化参数[format]:\n");
printf("  %%%%      same as %%\n");
printf("  %%a      abbreviated weekday name\n");
printf("  %%A      full weekday name\n");
printf("  %%b      abbreviated month name\n");
printf("  %%B      full month name\n");
printf("  %%c      basic date and time representation\n");
printf("  %%C      number of the century (00 - 99)\n");
printf("  %%d      day of month (01 - 31)\n");
printf("  %%D      date as %%m/%%d/%%y\n");
printf("  %%e      day of month (1-31; single digits are preceded by a blank)\n");
printf("  %%E      a modifier character used in association\n\t\t with certain conversion specifiers; see below.\n");
printf("  %%h      abbreviated month name\n");
printf("  %%H      hour (00 - 23)\n");
printf("  %%I      hour (01 - 12)\n");
printf("  %%j      day number of year (001 - 366)\n");
printf("  %%m      month number (01 - 12)\n");
printf("  %%M      minute (00 - 59)\n");
printf("  %%n      same as new-line\n");
printf("  %%N      default date and time representation\n");
printf("  %%O      a modifier character used in association\n\t\t with certain conversion  specifiers; see below\n");
printf("  %%p      equivalent of either AM or PM\n");
printf("  %%r      12-hour time (including %%p)\n");
printf("  %%R      same as %%H:%%M\n");
printf("  %%S      seconds (00 - 61), allows for leap seconds\n");
printf("  %%t      same as a tab\n");
printf("  %%T      same as %%H:%%M:%%S\n");
printf("  %%u      weekday number (1 - 7), Monday = 1\n");
printf("  %%U      week number of year (00 - 53), Sunday is the first day of week 1\n");
printf("  %%V      week number of the year\n");
printf("  %%w      weekday number (0 - 6), Sunday = 0\n");
printf("  %%W      week number of year (00 - 53), Monday is the first day of week 1\n");
printf("  %%x      locale's appropriate date representation\n");
printf("  %%X      locale's appropriate time representation\n");
printf("  %%y      year within century (00 - 99)\n");
printf("  %%Y      year as ccyy (for example, 1986)\n");
printf("  %%Z      time zone name or no characters if no time zone exists\n");	
exit(1);
}

main(int argc,char *argv[])
{
char ch;
char *procname;
int iStart,iFlag,iOutFlag;
int subTime;
time_t iTime;
time_t icurtime;
char *sGetStr;
struct tm *ntm;
struct tm when;
char outstr[256];
char fmtstr[256];


memset(fmtstr,0,sizeof(fmtstr));
iStart=0;
iOutFlag=0;
subTime=0;
procname=argv[0];
while((ch=getopt(argc,argv,"i:s:tx:oO:h"))!=EOF)
	switch(ch) {
	case 'i':
		iStart++;
		iFlag=1;
		iTime=atoi(optarg);
		break;
	case 's':
		iStart++;
		iFlag=2;
		sGetStr=optarg;
		break;
	case 't':
		iStart++;
		iFlag=3;
		break;
	case 'x':
		subTime=atoi(optarg);
		break;
	case 'o':
		iOutFlag=1;
		break;
	case 'O':
		iOutFlag=2;
		strcpy(fmtstr,optarg);
		break;
	case 'h':
		help(procname);
		return(1);
		break;
	default:
		break;
	}
argc -= optind;
argv += optind;
if (argc!=0||iStart!=1) { usage(procname);return(-1);}

switch(iFlag) {
case 1:
	break;
case 2:
	iStart=0;
	time(&icurtime);
	ntm=localtime(&icurtime);
	when.tm_year=ntm->tm_year;
	when.tm_mon=ntm->tm_mon;
	when.tm_mday=ntm->tm_mday;
	when.tm_hour=ntm->tm_hour;
	when.tm_min=ntm->tm_min;
	when.tm_sec=ntm->tm_sec;
	if(strlen(sGetStr)==6) {
	iStart=6;
	when.tm_hour=atoilen(sGetStr,2);
	when.tm_min=atoilen(sGetStr+2,2);	
	when.tm_sec=atoilen(sGetStr+4,2);	
	}
	if(strlen(sGetStr)==8) {
	iStart=8;
	when.tm_mday=atoilen(sGetStr,2);
	when.tm_hour=atoilen(sGetStr+2,2);
	when.tm_min=atoilen(sGetStr+4,2);	
	when.tm_sec=atoilen(sGetStr+6,2);	
	}
	if(strlen(sGetStr)==10) {
	iStart=10;
	when.tm_mon=atoilen(sGetStr,2)-1;
	when.tm_mday=atoilen(sGetStr+2,2);
	when.tm_hour=atoilen(sGetStr+4,2);
	when.tm_min=atoilen(sGetStr+6,2);	
	when.tm_sec=atoilen(sGetStr+8,2);	
	}
	if(strlen(sGetStr)==14) {
	iStart=14;
	when.tm_year=atoilen(sGetStr,4)-1900;
	when.tm_mon=atoilen(sGetStr+4,2)-1;
	when.tm_mday=atoilen(sGetStr+6,2);
	when.tm_hour=atoilen(sGetStr+8,2);
	when.tm_min=atoilen(sGetStr+10,2);	
	when.tm_sec=atoilen(sGetStr+12,2);	
	}

	if(when.tm_year>138||when.tm_year<=70) {printf("时间串年份%d超过限制(1971-2038)\n",when.tm_year+1900); exit(1);}
	if(when.tm_mon+1>12||when.tm_mon+1<=0) {printf("时间串月份%d错误\n",when.tm_mon+1); exit(1);}
	if(when.tm_mday>31||when.tm_mday<=0) {printf("时间串日期%d错误\n",when.tm_mday); exit(1);}
	if(when.tm_hour>23||when.tm_hour<0) {printf("时间串小时%d错误\n",when.tm_hour); exit(1);}
	if(when.tm_min>59||when.tm_min<0) {printf("时间串分钟%d错误\n",when.tm_min); exit(1);}
	if(when.tm_sec>59||when.tm_sec<0) {printf("时间串秒钟%d错误\n",when.tm_sec); exit(1);}
	if(iStart<=0) { printf("时间串长度错误\n");exit(1);}

	iTime=mktime(&when);
	break;
case 3:
	time(&iTime);
	break;
}

iTime=iTime + subTime*24*60*60;

switch(iOutFlag) {
	case 1:
	printf("%d\n",iTime);
	break;
	case 2:
	cftime(outstr, fmtstr,&iTime);
	printf("%s\n",outstr);
	break;
	default:
	strcpy(fmtstr,"%Y-%m-%d %T");
	cftime(outstr, fmtstr,&iTime);
	printf("%s\n",outstr);
	break;
}

}

int atoilen(char *Buf,int iLen)
{
 int numb;
 char strbuf[12];

 if (iLen>=12 || iLen<=0) return(-1);
 memset(strbuf,0,sizeof(strbuf));
 memcpy(strbuf,Buf,iLen);
 numb=atoi(strbuf);
 return(numb);
}

⌨️ 快捷键说明

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