取操作系统的时间。
缺省是"yyyy-mm-dd hh24:mi:ss",目前支持以下格式:
"yyyy-mm-dd hh24:mi:ss"
"yyyymmddhh24miss"
"yyyy-mm-dd"
"yyyymmdd"
"hh24:mi:ss"
"hh24miss"
"hh24:mi"
"hh24mi"
"hh24"
"mi"
注意:
1)小时的表示方法是hh24,不是hh,这么做的目的是为了保持与数据库的时间表示方法一致;
2)以上列出了常用的时间格式,如果不能满足你应用开发的需求,请修改源代码timetostr函数增加更多的格式支持;
3)调用函数的时候,如果fmt与上述格式都匹配,stime的内容将为空。
4)时间的年份是四位,其它的可能是一位和两位,如果不足两位,在前面补0。
void LocalTime(char *stime,const char *fmt=0,const int timetvl=0);
void LocalTime(char *stime,const char *fmt,const int timetvl)
{
if (stime==0) return;
time_t timer;
time( &timer ); timer=timer+timetvl;
timetostr(timer,stime,fmt);
}
int main()
{
char strtime[20];
memset(strtime,0,sizeof(strtime));
LocalTime(strtime,"yyyy-mm-dd hh24:mi:ss",-30);
printf("strtime1=%s\n",strtime);
LocalTime(strtime,"yyyy-mm-dd hh24:mi:ss");
printf("strtime2=%s\n",strtime);
LocalTime(strtime,"yyyy-mm-dd hh24:mi:ss",30);
printf("strtime3=%s\n",strtime);
printf("=%d\n",time(0));
}
把整数表示的时间转换为字符串表示的时间。
void timetostr(const time_t ltime,char *stime,const char *fmt=0);
void timetostr(const time_t ltime,char *stime,const char *fmt)
{
if (stime==0) return;
strcpy(stime,"");
struct tm sttm = *localtime ( <ime );
sttm.tm_year=sttm.tm_year+1900;
sttm.tm_mon++;
if (fmt==0)
{
snprintf(stime,20,"%04u-%02u-%02u %02u:%02u:%02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour,
sttm.tm_min,sttm.tm_sec);
return;
}
if (strcmp(fmt,"yyyy-mm-dd hh24:mi:ss") == 0)
{
snprintf(stime,20,"%04u-%02u-%02u %02u:%02u:%02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour,
sttm.tm_min,sttm.tm_sec);
return;
}
if (strcmp(fmt,"yyyy-mm-dd hh24:mi") == 0)
{
snprintf(stime,17,"%04u-%02u-%02u %02u:%02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour,
sttm.tm_min);
return;
}
if (strcmp(fmt,"yyyy-mm-dd hh24") == 0)
{
snprintf(stime,14,"%04u-%02u-%02u %02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour);
return;
}
if (strcmp(fmt,"yyyy-mm-dd") == 0)
{
snprintf(stime,11,"%04u-%02u-%02u",sttm.tm_year,sttm.tm_mon,sttm.tm_mday);
return;
}
if (strcmp(fmt,"yyyy-mm") == 0)
{
snprintf(stime,8,"%04u-%02u",sttm.tm_year,sttm.tm_mon);
return;
}
if (strcmp(fmt,"yyyymmddhh24miss") == 0)
{
snprintf(stime,15,"%04u%02u%02u%02u%02u%02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour,
sttm.tm_min,sttm.tm_sec);
return;
}
if (strcmp(fmt,"yyyymmddhh24mi") == 0)
{
snprintf(stime,13,"%04u%02u%02u%02u%02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour,
sttm.tm_min);
return;
}
if (strcmp(fmt,"yyyymmddhh24") == 0)
{
snprintf(stime,11,"%04u%02u%02u%02u",sttm.tm_year,
sttm.tm_mon,sttm.tm_mday,sttm.tm_hour);
return;
}
if (strcmp(fmt,"yyyymmdd") == 0)
{
snprintf(stime,9,"%04u%02u%02u",sttm.tm_year,sttm.tm_mon,sttm.tm_mday);
return;
}
if (strcmp(fmt,"hh24miss") == 0)
{
snprintf(stime,7,"%02u%02u%02u",sttm.tm_hour,sttm.tm_min,sttm.tm_sec);
return;
}
if (strcmp(fmt,"hh24mi") == 0)
{
snprintf(stime,5,"%02u%02u",sttm.tm_hour,sttm.tm_min);
return;
}
if (strcmp(fmt,"hh24") == 0)
{
snprintf(stime,3,"%02u",sttm.tm_hour);
return;
}
if (strcmp(fmt,"mi") == 0)
{
snprintf(stime,3,"%02u",sttm.tm_min);
return;
}
}
time_t strtotime(const char *stime);
time_t strtotime(const char *stime)
{
char strtime[21],yyyy[5],mm[3],dd[3],hh[3],mi[3],ss[3];
memset(strtime,0,sizeof(strtime));
memset(yyyy,0,sizeof(yyyy));
memset(mm,0,sizeof(mm));
memset(dd,0,sizeof(dd));
memset(hh,0,sizeof(hh));
memset(mi,0,sizeof(mi));
memset(ss,0,sizeof(ss));
PickNumber(stime,strtime,false,false);
if (strlen(strtime) != 14) return -1;
strncpy(yyyy,strtime,4);
strncpy(mm,strtime+4,2);
strncpy(dd,strtime+6,2);
strncpy(hh,strtime+8,2);
strncpy(mi,strtime+10,2);
strncpy(ss,strtime+12,2);
struct tm time_str;
time_str.tm_year = atoi(yyyy) - 1900;
time_str.tm_mon = atoi(mm) - 1;
time_str.tm_mday = atoi(dd);
time_str.tm_hour = atoi(hh);
time_str.tm_min = atoi(mi);
time_str.tm_sec = atoi(ss);
time_str.tm_isdst = 0;
return mktime(&time_str);
}
int main()
{
time_t ltime;
char strtime[20];
memset(strtime,0,sizeof(strtime));
strcpy(strtime,"2020-01-01 12:35:22");
ltime=strtotime(strtime);
printf("ltime=%ld\n",ltime);
memset(strtime,0,sizeof(strtime));
timetostr(ltime,strtime,"yyyy-mm-dd hh24:mi:ss");
printf("strtime=%s\n",strtime);
}
把字符串表示的时间加上一个偏移的秒数后得到一个新的字符串表示的时间。
bool AddTime(const char *in_stime,char *out_stime,const int timetvl,const char *fmt=0);
bool AddTime(const char *in_stime,char *out_stime,const int timetvl,const char *fmt)
{
if ( (in_stime==0) || (out_stime==0) ) return false;
time_t timer;
if ( (timer=strtotime(in_stime))==-1) { strcpy(out_stime,""); return false; }
timer=timer+timetvl;
strcpy(out_stime,"");
timetostr(timer,out_stime,fmt);
return true;
}
int main()
{
time_t ltime;
char strtime[20];
memset(strtime,0,sizeof(strtime));
strcpy(strtime,"2020-01-01 12:35:22");
AddTime(strtime,strtime,0-1*24*60*60);
printf("strtime=%s\n",strtime);
AddTime(strtime,strtime,2*24*60*60);
printf("strtime=%s\n",strtime);
}