用到的函数主要有strftime、strptime 、localtime 、mktime
。
名词解释:
时间戳
:是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
时间字符串
:形如2021-12-01 12:00:00
size_t strftime(char *s,size_t maxsize,char *format,const struct tm *timeptr)
作用:strftime将一个tm结构格式化为一个字符串
参数:format为输出数据格式
char *strptime(const char *buf,const char *format,struct tm *timeptr)
作用:strptime则是将一个字符串格式化为一个tm结构。
参数:buf为要修改的时间,一般为GPS时间
Format为数据格式,与buf时间格式必须一致,要不然会有段错误
%Y-%m-%d %H:%M:%S 年-月-日 时:分:秒
其他常见的格式化字符如下表所示:
格式 | 含义 |
---|---|
%a | 星期几的简写形式 |
%A | 星期几的全称 |
%b | 月份的简写形式 |
%B | 月份的全称 |
%c | 日期和时间 |
%d | 月份中的日期,0-31 |
%H | 小时,00-23 |
%I | 12进制小时钟点,01-12 |
%j | 年份中的日期,001-366 |
%m | 年份中的月份,01-12 |
%M | 分钟,00-59 |
%p | 上午或下午 |
%S | 秒,00-60 |
%u | 星期几,1-7 |
%w | 星期几,0-6 |
%x | 当地格式的日期 |
#include
#include
#include
using namespace std;
string convertTimeStamp2TimeStr(time_t timeStamp){
struct tm *timeinfo = nullptr;
char buffer[80];
timeinfo = localtime(&timeStamp);
strftime(buffer,80,"%Y-%m-%d %H:%M:%S",timeinfo);
printf("%s\n",buffer);
return string(buffer);
}
int main(void)
{
convertTimeStamp2TimeStr(1633071600); //2021-10-1 15:00:00
return 0;
}
#include
#include
#include
using namespace std;
time_t convertTimeStr2TimeStamp(string timeStr){
struct tm timeinfo;
strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &timeinfo);
time_t timeStamp = mktime(&timeinfo);
printf("timeStamp=%ld\n",timeStamp);
return timeStamp;
}
int main(void)
{
convertTimeStr2TimeStamp("2021-10-1 15:00:00");
return 0;
}
由于windows下没有strptime函数,可以使用scanf来格式化时间
#include
#include
#include
#include
using namespace std;
time_t StringToTimeStamp(string str){
struct tm tm_;
int year, month, day, hour, minute,second;
sscanf(str.c_str(),"%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);
tm_.tm_year = year-1900;
tm_.tm_mon = month-1;
tm_.tm_mday = day;
tm_.tm_hour = hour;
tm_.tm_min = minute;
tm_.tm_sec = second;
tm_.tm_isdst = 0;
time_t timeStamp = mktime(&tm_);
return timeStamp;
}
int main(void)
{
cout << StringToTimeStamp("2021-10-1 15:00:00") << endl;
return 0;
}
time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1
struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。