65,187
社区成员




#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]
//
Time Functions
The following functions are used with time.
CompareFileTime
DosDateTimeToFileTime
FileTimeToDosDateTime
FileTimeToLocalFileTime
FileTimeToSystemTime
GetFileTime
GetLocalTime
GetSystemTime
GetSystemTimeAdjustment
GetSystemTimeAsFileTime
GetTickCount
GetTimeZoneInformation
LocalFileTimeToFileTime
SetFileTime
SetLocalTime
SetSystemTime
SetSystemTimeAdjustment
SetTimeZoneInformation
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
Obsolete Functions
GetCurrentTime