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

📄 strtotm.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <ctype.h>static char*skiptext(char *q){	while(*q!='\0' && *q!=' ' && *q!='\t' && *q!='\r' && *q!='\n')		q++;	return q;}static char*skipwhite(char *q){	while(*q==' ' || *q=='\t' || *q=='\r' || *q=='\n')		q++;	return q;}static char* months[] = {	"jan", "feb", "mar", "apr",	"may", "jun", "jul", "aug", 	"sep", "oct", "nov", "dec"};static intstrcmplwr(char *a, char *b, int n){	char *eb;	eb = b+n;	while(*a && *b && b<eb){		if(tolower(*a) != tolower(*b))			return 1;		a++;		b++;	}	if(b==eb)		return 0;	return *a != *b;}intstrtotm(char *p, Tm *tmp){	char *q, *r;	int j;	Tm tm;	int delta;	delta = 0;	memset(&tm, 0, sizeof(tm));	tm.mon = -1;	tm.hour = -1;	tm.min = -1;	tm.year = -1;	tm.mday = -1;	for(p=skipwhite(p); *p; p=skipwhite(q)){		q = skiptext(p);		/* look for time in hh:mm[:ss] */		if(r = memchr(p, ':', q-p)){			tm.hour = strtol(p, 0, 10);			tm.min = strtol(r+1, 0, 10);			if(r = memchr(r+1, ':', q-(r+1)))				tm.sec = strtol(r+1, 0, 10);			else				tm.sec = 0;			continue;		}		/* look for month */		for(j=0; j<12; j++)			if(strcmplwr(p, months[j], 3)==0){				tm.mon = j;				break;			}		if(j!=12)			continue;		/* look for time zone [A-Z][A-Z]T */		if(q-p==3 && 'A' <= p[0] && p[0] <= 'Z' 		&& 'A' <= p[1] && p[1] <= 'Z' && p[2] == 'T'){			strecpy(tm.zone, tm.zone+4, p);			continue;		}		if(p[0]=='+'||p[0]=='-')		if(q-p==5 && strspn(p+1, "0123456789") == 4){			delta = (((p[1]-'0')*10+p[2]-'0')*60+(p[3]-'0')*10+p[4]-'0')*60;			if(p[0] == '-')				delta = -delta;			continue;		}		if(strspn(p, "0123456789") == q-p){			j = strtol(p, nil, 10);			if(1 <= j && j <= 31)				tm.mday = j;			if(j >= 1900)				tm.year = j-1900;		}	}	if(tm.mon<0 || tm.year<0	|| tm.hour<0 || tm.min<0	|| tm.mday<0)		return -1;	*tmp = *localtime(tm2sec(&tm)-delta);	return 0;}

⌨️ 快捷键说明

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