c++时间戳获取和转换

1、使用api

可以使用windows下和linux下api函数来获取,比较简单,如下所示:

int64_t getTimeStamp()
{
//毫秒数
    int mSecond = 0; 
#if defined(WIN32)
    SYSTEMTIME sys;
    GetLocalTime(&sys);
    mSecond = sys.wMilliseconds;
#else
//linux 下gettimeofday
    struct timeval    tv;
    struct timezone tz;
    struct tm* p;
    gettimeofday(&tv, &tz);
    p = localtime(&tv.tv_sec);
    mSecond = tv.tv_usec / 1000;
#endif
    int64_t timeStamp = ((int64_t)time(NULL)) * 1000 + mSecond;
    return timeStamp;
}

2、使用标准c++函数

使用标准c++就没有那么多麻烦了

  std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tpMicro
        = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
    time_t timeStamp2 = tpMicro.time_since_epoch().count();

3、时间转time_t

对于一些不标准的字符串时间,我们需要转换时,可以十一用sscanf函数,windows下使用sscanf_s

time_t StringToDatetime(const char* str)
{
    tm tm_;
    int year, month, day, hour, minute, second;
    sscanf_s(str, "%d/%d/%d %d:%d:%d", &day, &month, &year, &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 t_ = mktime(&tm_); //已经减了8个时区  
    return t_; //秒时间  
}

4 、调用

int main()
{
    int64_t timeStamp = getTimeStamp();


    std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tpMicro
        = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
    time_t timeStamp2 = tpMicro.time_since_epoch().count();


    std::cout << timeStamp << std::endl;
    std::cout << timeStamp2 << std::endl;
   
    std::string a = "1/4/2022 00:00:20";
    std::string b = "1/4/2022 00:00:01";
    time_t t1 = StringToDatetime(a.c_str());
    time_t t2 = StringToDatetime(b.c_str());

    std::cout << t2-t1<<"\n";
}

结果如下所示
在这里插入图片描述
可以看出c调用api函数和调用标准c++的结果是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值