69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <time.h>
struct tm st;
time_t tt;
char timstr[40];
char tmpbuf[128];
char c;
int t;
int AP() {
if ('P'==c || 'p'==c) {st.tm_hour+=12;return 1;}
if ('A'==c || 'a'==c) return 1;
return 0;
}
int dtparse() {
if (7==sscanf(timstr,"%d/%d/%4d %d:%d:%d %c",&st.tm_mday,&st.tm_mon ,&st.tm_year,&st.tm_hour,&st.tm_min,&st.tm_sec,&c)) if (AP()) goto STEP2;
if (6==sscanf(timstr,"%d/%d/%4d %d:%d%c" ,&st.tm_mday,&st.tm_mon ,&st.tm_year,&st.tm_hour,&st.tm_min ,&c)) if (AP()) goto STEP1;
if (6==sscanf(timstr,"%4d/%d/%d %d:%d %c" ,&st.tm_year,&st.tm_mon ,&st.tm_mday,&st.tm_hour,&st.tm_min ,&c)) if (AP()) goto STEP1;
if (5==sscanf(timstr,"%d.%d.%4d %d:%d" ,&st.tm_mon ,&st.tm_mday,&st.tm_year,&st.tm_hour,&st.tm_min )) goto STEP1;
if (6==sscanf(timstr,"%4d-%d-%d %d:%d:%d" ,&st.tm_year,&st.tm_mon ,&st.tm_mday,&st.tm_hour,&st.tm_min,&st.tm_sec )) goto STEP2;
STEP1:
st.tm_sec=0;
STEP2:
st.tm_year-=1900;
if (st.tm_mon>12) {t=st.tm_mon;st.tm_mon=st.tm_mday;st.tm_mday=t;}
st.tm_mon-=1;
tt=mktime(&st);
if (-1!=tt) {
strftime(tmpbuf,128,"%Y-%m-%d %H:%M:%S",localtime(&tt));
return 1;
} else {
printf("[%s] is Invalid time string!\n",timstr);
return 0;
}
}
int main() {
strcpy(timstr,"10.01.2012 15:43" );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
strcpy(timstr,"8/11/2006 11:10AM" );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
strcpy(timstr,"2006/10/31 04:50 PM" );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
strcpy(timstr,"1/6/2010 5:20:12 PM" );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
strcpy(timstr,"13/12/2012 11:16:17 a.m.");if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
strcpy(timstr,"2013-06-08 09:56:59" );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
return 0;
}
//[10.01.2012 15:43] is [2012-10-01 15:43:00]
//[8/11/2006 11:10AM] is [2006-11-08 11:10:00]
//[2006/10/31 04:50 PM] is [2006-10-31 16:50:00]
//[1/6/2010 5:20:12 PM] is [2010-06-01 17:20:12]
//[13/12/2012 11:16:17 a.m.] is [2012-12-13 11:16:17]
//[2013-06-08 09:56:59] is [2013-06-08 09:56:59]
//