C/C++时间字符串和时间戳的相互转化

用到的函数主要有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
%I12进制小时钟点,01-12
%j年份中的日期,001-366
%m年份中的月份,01-12
%M分钟,00-59
%p上午或下午
%S秒,00-60
%u星期几,1-7
%w星期几,0-6
%x当地格式的日期

时间戳转时间字符串(strftime)

#include <stdio.h>
#include <string>
#include <time.h>
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 <stdio.h>
#include <string>
#include <time.h>
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下时间字符串转时间戳

由于windows下没有strptime函数,可以使用scanf来格式化时间

#include <stdio.h>
#include <string>
#include <time.h>
#include <iostream>
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;
}

结构体tm转time_t

time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1

time_t转结构体tm

struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。

要将时间字符串转换时间戳,有多种方法可以实现。引用提供了JavaScript的示例代码,可以根据时间字符串的长度使用不同的方式来获取时间戳。如果时间字符串的长度为10,表示时间戳是以秒为单位的,可以将时间字符串乘以1000转换为以毫秒为单位的时间戳。如果时间字符串的长度为13或19,表示时间戳已经是以毫秒为单位的,可以直接使用时间字符串作为时间戳。然后,可以使用JavaScript的Date对象的方法来获取年、月、日、小时、分钟和秒。如果月、日、小时、分钟、秒的值小于10,则在前面补零。最后,将获取到的年、月、日、小时、分钟和秒拼接成字符串返回即可。 引用是Java的示例代码,可以使用DateTimeUtils类的toLongDateStr方法将时间字符串转换时间戳。这个方法接受一个时间字符串作为参数,并返回一个时间戳字符串。 引用提供了一个封装方法conversionTime,可以将时间字符串转换时间戳。这个方法首先判断传入的时间字符串是否为空,如果为空则返回空字符串。然后,判断传入的时间字符串的格式,如果是以'-'分隔的日期格式,则将'-'替换为'/',以兼容360和IE浏览器。接着,将时间字符串转换为Date对象,并使用Date.parse方法将Date对象转换时间戳。最后,返回时间戳。 综上所述,要将时间字符串转换时间戳,可以根据自己所用的编程语言选择相应的方法实现。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值