中国开发网: 论坛: 程序员情感CBD: 贴子 65896
老玉米: 给你个我们常用的处理时间字符串的单元。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <sys/timeb.h>

#define TONG_LIB_INTERNAL
#include "tong_time.h"

/**********************************************************
* &cedil;&ntilde;&Ecirc;&frac12;&raquo;&macr;&Ecirc;±&frac14;&auml;&ETH;&Aring;&Iuml;&cent;&pound;&not;·&micro;&raquo;&Oslash;&Ecirc;±&frac14;&auml;&acute;&reg;: YYYYMMDD hh:mm:ss
* &frac34;&laquo;&Egrave;·&micro;&frac12;&Atilde;&euml;
**********************************************************/
static int DayOfMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};

/*
Function name : TimeStructToTime
Description : &frac12;&laquo;&Ecirc;±&frac14;&auml;&frac12;á&sup1;&sup1;×&ordf;&raquo;&raquo;&Icirc;&ordf;&Ecirc;±&frac14;&auml;&Ouml;&micro;
Return type : >=0: ×&ordf;&raquo;&raquo;&ordm;ó&micro;&Auml;&Ecirc;±&frac14;&auml;&Ouml;&micro;
-1: &Ecirc;§°&Uuml;
Argument : int Year
Argument : int Month
Argument : int Day
Argument : int Hour
Argument : int Minute
Argument : int Second
*/
time_t WINAPI TimeStructToTime(int Year, int Month, int Day, int Hour, int Minute, int Second)
{
struct tm tf;

if (Year < 1900)
return -1;
if (Month<1 || Month>12)
return -1;
if (Day < 1)
return -1;
else if (Year%4==0 && Month==2) {
if (Day > (DayOfMonth[Month-1]+1))
return -1;
}
else if (Day > DayOfMonth[Month-1])
return -1;

if (Hour<0 || Hour>=24)
return -1;
if (Minute<0 || Minute >= 60)
return -1;
if (Second<0 || Second >= 60)
return -1;

tf.tm_year = Year - 1900;
tf.tm_mon = Month - 1;
tf.tm_mday = Day;
tf.tm_hour = Hour;
tf.tm_min = Minute;
tf.tm_sec = Second;
tf.tm_isdst = -1;

return mktime(&tf);
}

#define DATEFMT_YEAR 'Y' /* &Ecirc;±&frac14;&auml;&cedil;&ntilde;&Ecirc;&frac12;&Ouml;&ETH;&Auml;ê&micro;&Auml;±ê&Ecirc;&para;×&Ouml;·&ucirc; */
#define DATEFMT_MONTH 'M' /* &Ecirc;±&frac14;&auml;&cedil;&ntilde;&Ecirc;&frac12;&Ouml;&ETH;&Ocirc;&Acirc;&micro;&Auml;±ê&Ecirc;&para;×&Ouml;·&ucirc; */
#define DATEFMT_DAY 'D' /* &Ecirc;±&frac14;&auml;&cedil;&ntilde;&Ecirc;&frac12;&Ouml;&ETH;&Egrave;&Otilde;&micro;&Auml;±ê&Ecirc;&para;×&Ouml;·&ucirc; */
#define DATEFMT_HOUR 'h' /* &Ecirc;±&frac14;&auml;&cedil;&ntilde;&Ecirc;&frac12;&Ouml;&ETH;&ETH;&iexcl;&Ecirc;±&micro;&Auml;±ê&Ecirc;&para;×&Ouml;·&ucirc; */
#define DATEFMT_MINUTE 'm' /* &Ecirc;±&frac14;&auml;&cedil;&ntilde;&Ecirc;&frac12;&Ouml;&ETH;·&Ouml;&Ouml;&Oacute;&micro;&Auml;±ê&Ecirc;&para;×&Ouml;·&ucirc; */
#define DATEFMT_SECOND 's' /* &Ecirc;±&frac14;&auml;&cedil;&ntilde;&Ecirc;&frac12;&Ouml;&ETH;&Atilde;&euml;&Ecirc;&yacute;&micro;&Auml;±ê&Ecirc;&para;×&Ouml;·&ucirc; */

static char *T_TIMEFORMAT = "YYYYMMDDhhmmss";

/*
Function name : DateStrToTimeByFmt
Description : &cedil;ù&frac34;&Yacute;&cedil;&ntilde;&Ecirc;&frac12;&frac12;&laquo;&Ecirc;±&frac14;&auml;×&Ouml;·&ucirc;&acute;&reg;×&ordf;&raquo;&raquo;&Icirc;&ordf;&Ecirc;±&frac14;&auml;&Ouml;&micro;
Return type : >=0: ×&ordf;&raquo;&raquo;&ordm;ó&micro;&Auml;&Ecirc;±&frac14;&auml;&Ouml;&micro;
-1: &Ecirc;§°&Uuml;
Argument : char *TBuf &Ecirc;±&frac14;&auml;×&Ouml;·&ucirc;&acute;&reg;&Ouml;&cedil;&Otilde;&euml;
Argument : char *Fmt &cedil;&ntilde;&Ecirc;&frac12;&Atilde;è&Ecirc;&ouml;&Ouml;&cedil;&Otilde;&euml;
*/
time_t WINAPI DateStrToTimeByFmt(char *TBuf, char *Fmt)
{
int Year = 0;
int Month = 0;
int Day = 0;
int Hour = 0;
int Minute = 0;
int Second = 0;
int ValueLen;
int Loc;
int ErrorFlag;
char *Ptr;

if (TBuf == NULL)
return -1;
if (Fmt == NULL)
Fmt = T_TIMEFORMAT;

ValueLen = strlen(TBuf);
Loc = 0;
ErrorFlag = 0;
Ptr = TBuf;
while (*Fmt && Loc<ValueLen) {
switch (*Fmt) {
case DATEFMT_YEAR:
if (isdigit(*Ptr)) {
Year = Year*10 + (*Ptr) - '0';
Ptr ++;
Loc ++;
}
break;
case DATEFMT_MONTH:
if (isdigit(*Ptr)) {
Month = Month*10 + (*Ptr) - '0';
Ptr ++;
Loc ++;
}
break;
case DATEFMT_DAY:
if (isdigit(*Ptr)) {
Day = Day*10 + (*Ptr) - '0';
Ptr ++;
Loc ++;
}
break;
case DATEFMT_HOUR:
if (isdigit(*Ptr)) {
Hour = Hour*10 + (*Ptr) - '0';
Ptr ++;
Loc ++;
}
break;
case DATEFMT_MINUTE:
if (isdigit(*Ptr)) {
Minute = Minute*10 + (*Ptr) - '0';
Ptr ++;
Loc ++;
}
break;
case DATEFMT_SECOND:
if (isdigit(*Ptr)) {
Second = Second*10 + (*Ptr) - '0';
Ptr ++;
Loc ++;
}
break;
default: /* &Ecirc;&Ccedil;·&Ouml;&cedil;&ocirc;·&ucirc;&ordm;&Aring; */
if (*Fmt == *Ptr) {
Ptr ++;
Loc ++;
}
else { /* &Oacute;&euml;&Auml;&pound;°&aelig;&cedil;&ntilde;&Ecirc;&frac12;&sup2;&raquo;&AElig;&yen;&Aring;&auml; */
Loc = ValueLen;
ErrorFlag = 1;
}
break;
}
Fmt ++;
}
if (ErrorFlag)
return -1;
if (*Fmt==0 && Loc<ValueLen) /* &Auml;&pound;°&aelig;&frac12;á&Ecirc;&oslash;&micro;&laquo;&Ecirc;&yacute;&frac34;&Yacute;&Icirc;&acute;&frac12;á&Ecirc;&oslash; */
return -1;

return TimeStructToTime(Year, Month, Day, Hour, Minute, Second);
}


/*
Function name : DateStrToTime
Description : &frac12;&laquo;YYYYMMHH&cedil;&ntilde;&Ecirc;&frac12;&micro;&Auml;&Egrave;&Otilde;&AElig;&Uacute;×&Ouml;·&ucirc;&acute;&reg;×&ordf;&raquo;&raquo;&Icirc;&ordf;&Ecirc;±&frac14;&auml;&Ouml;&micro;
Return type : >=0: ×&ordf;&raquo;&raquo;&ordm;ó&micro;&Auml;&Ecirc;±&frac14;&auml;&Ouml;&micro;
-1: &Ecirc;§°&Uuml;
Argument : char *TBuf &Egrave;&Otilde;&AElig;&Uacute;×&Ouml;·&ucirc;&acute;&reg;&Ouml;&cedil;&Otilde;&euml;
*/
time_t WINAPI DateStrToTime(char *TBuf)
{
/* DateStr format is YYYYMMHH */
struct tm tf;
char buf[10];

if (TBuf == NULL)
return -1;
if (strlen(TBuf) != 8)
return -1;

memset(&tf, 0, sizeof(tf));

memcpy(buf, TBuf, 4);
buf[4] = 0;
tf.tm_year = atoi(buf) - 1900;
memcpy(buf, TBuf+4, 2);
buf[2] = 0;
tf.tm_mon = atoi(buf) - 1;
memcpy(buf, TBuf+6, 2);
buf[2] = 0;
tf.tm_mday = atoi(buf);
tf.tm_hour = 0;
tf.tm_min = 0;
tf.tm_sec = 0;
tf.tm_isdst = -1;

return mktime(&tf);
}

char * WINAPI DateToString(time_t t, char *TimeBuf)
{
struct tm *tf;

if (TimeBuf) {
tf = localtime(&t);
sprintf(TimeBuf, "%4d%02d%02d",
tf->tm_year+1900, tf->tm_mon+1, tf->tm_mday);
}
return TimeBuf;
}

char * WINAPI TimeToString(time_t t, char *TimeBuf)
{
struct tm *tf;

if (TimeBuf) {
tf = localtime(&t);
sprintf(TimeBuf,"%4d%02d%02d%02d%02d%02d",
tf->tm_year+1900, tf->tm_mon+1, tf->tm_mday,
tf->tm_hour, tf->tm_min, tf->tm_sec);
}
return TimeBuf;
}

/*
Function name : *FmtTime
Description : &frac12;&laquo;&Ecirc;±&frac14;&auml;&Ouml;&micro;×&ordf;&raquo;&raquo;&Icirc;&ordf;×&Ouml;·&ucirc;&acute;&reg;&cedil;&ntilde;&Ecirc;&frac12;&pound;&not;&Ecirc;&auml;&sup3;&ouml;&cedil;&ntilde;&Ecirc;&frac12;&Icirc;&ordf;YYYYMMDD hh:mm:ss
Return type : ×&Ouml;·&ucirc;&acute;&reg;&cedil;&ntilde;&Ecirc;&frac12;&Ecirc;±&frac14;&auml;&micro;&Auml;&Ouml;&cedil;&Otilde;&euml;
Argument : t &Ecirc;±&frac14;&auml;&Ouml;&micro;
Argument : TimeBuf &acute;&aelig;·&Aring;×&Ouml;·&ucirc;&acute;&reg;&cedil;&ntilde;&Ecirc;&frac12;&Ecirc;±&frac14;&auml;&micro;&Auml;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;&Ouml;&cedil;&Otilde;&euml;
*/
char * WINAPI FmtTime(time_t t, char *TimeBuf)
{
struct tm *tf;

if (TimeBuf) {
tf=localtime(&t);
if (tf)
sprintf(TimeBuf,"%4d%02d%02d %02d:%02d:%02d",
tf->tm_year+1900,tf->tm_mon+1,tf->tm_mday,
tf->tm_hour,tf->tm_min,tf->tm_sec);
else
TimeBuf[0] = 0;

}
return TimeBuf;
}

static char TimeBuf[30];

char * WINAPI GetCurDate(char *TimeBuf)
{
time_t t;

time(&t);

return DateToString(t, TimeBuf);
}

/*
Function name : *GetCurTime
Description : &raquo;&ntilde;&Egrave;&iexcl;&micro;±&Ccedil;°&Ecirc;±&frac14;&auml;&pound;&not;&sup2;&cent;&Ograve;&Ocirc;×&Ouml;·&ucirc;&acute;&reg;&ETH;&Icirc;&Ecirc;&frac12;&Ecirc;&auml;&sup3;&ouml;&pound;&not;&Ecirc;&auml;&sup3;&ouml;&cedil;&ntilde;&Ecirc;&frac12;&Icirc;&ordf;YYYYMMDD hh:mm:ss
Return type : ×&Ouml;·&ucirc;&acute;&reg;&cedil;&ntilde;&Ecirc;&frac12;&Ecirc;±&frac14;&auml;&micro;&Auml;&Ouml;&cedil;&Otilde;&euml;
*/
char * WINAPI GetCurTime()
{ time_t t;

time(&t);
return FmtTime(t,TimeBuf);
}

/**********************************************************
* &cedil;ù&frac34;&Yacute;&micro;±&Ccedil;°&Ecirc;±&frac14;&auml; ,·&micro;&raquo;&Oslash;&Ecirc;±&frac14;&auml;&acute;&reg;: MMDD hh:mm:ss.ms
* &frac34;&laquo;&Egrave;·&micro;&frac12;&ordm;&Aacute;&Atilde;&euml;
**********************************************************/
static char STIME[31];

/*
Function name : *GetCurMTime
Description : &raquo;&ntilde;&Egrave;&iexcl;&micro;±&Ccedil;°&ordm;&Aacute;&Atilde;&euml;&frac14;&para;&Ecirc;±&frac14;&auml;&pound;&not;&sup2;&cent;&Ograve;&Ocirc;×&Ouml;·&ucirc;&acute;&reg;&ETH;&Icirc;&Ecirc;&frac12;&Ecirc;&auml;&sup3;&ouml;&pound;&not;&Ecirc;&auml;&sup3;&ouml;&cedil;&ntilde;&Ecirc;&frac12;&Icirc;&ordf;MMDD hh:mm:ss.ms
Return type : ×&Ouml;·&ucirc;&acute;&reg;&cedil;&ntilde;&Ecirc;&frac12;&Ecirc;±&frac14;&auml;&micro;&Auml;&Ouml;&cedil;&Otilde;&euml;
*/
char * WINAPI GetCurMTime()
{
struct tm *t;
struct timeb mtp;

ftime(&mtp);
memset(STIME,0,31);
t = localtime(&mtp.time);
sprintf(STIME, "%02d%02d %02d:%02d:%02d.%03d",
t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, mtp.millitm);
return STIME;
}

/**********************************************************
* &Oacute;&ETH;&ETH;&copy;&Iuml;&micro;&Iacute;&sup3;&sup2;&raquo;&Ouml;§&sup3;&Ouml;ftime
* &Ecirc;&sup1;&Oacute;&Atilde;&Igrave;&otilde;&frac14;&thorn;±à&Ograve;&euml;T_FTIME&Agrave;&acute;&Ecirc;&sup1;&Oacute;&Atilde;&cedil;&Atilde;&para;¨&Ograve;&aring;
**********************************************************/
#ifdef T_FTIME
/* timeb.h file in /usr/coff/usr/include/bcs/sys */

int ftime(tb)
struct timeb *tb;
{
time(&tb->time);
tb->millitm=0;
return 0;
}
#endif /* T_FTIME */
民主不同于专制,不需要强加于人。--- 賴斯

大道之行也,天下为公,选贤与能,讲信修睦。故人不独亲其亲,不独子其子,使老有所终,壮有所用,幼有所长,矜、寡、孤、独、废疾者,皆有所养。男有分,女有归。货恶其弃於地也,不必藏於己;力恶其不出於身也,不必为己。是故,谋闭而不兴,盗窃乱贼而不作,故外户而不闭,是谓大同。--《礼运·大同篇》

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录