C++获取Unix时间戳(分别以秒和毫秒为单位)的几种方法


前言

   有时需要打印当前的绝对时间,并计算时间间隔,Unix时间戳是一种很好的时间记录标准,表示从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。C++的标准库中并没有能够打印时间戳的方法,需要借助其它第三方库,在此记录了几种方法

正文

1、调用ctime库

#include <iostream>
#include <ctime>
 
int main()
{
    std::time_t t = std::time(0);  // t is an integer type
    std::cout << t << " seconds since 01-Jan-1970\n";
    return 0;
}

输出为:

1467214075 seconds since 01-Jan-1970

该方法只适用于表示以秒为单位的Unix时间戳。

2、调用chrono

#include <iostream>
#include <chrono>
 
int main()
{
 
    std::chrono::milliseconds ms = std::chrono::duration_cast< std::chrono::milliseconds >(
        std::chrono::system_clock::now().time_since_epoch()
    );
 
    std::cout << ms.count() << std::endl;
    return 0;
}

输出以毫秒为单位的时间戳:

1644848307026

如果想得到以秒为单位的时间戳,只需将milliseconds换成seconds即可。

3、调用sys/timeb.h

#include <iostream>
#include <sys/timeb.h>
 
int main()
{
    timeb t;
    ftime(&t);
    long now = t.time * 1000 + t.millitm;
    std::cout << now << std::endl;
    return 0;
}

输出以毫秒为单位的时间戳:

1644848305625

如果想得到以秒为单位的时间戳,需要修改成如下形式:

#include <iostream>
#include <sys/timeb.h>
 
int main()
{
    timeb t;
    ftime(&t);
    int now = t.time;
    std::cout << now << std::endl;
    return 0;
}

输出为:

1644848308

总结

  以上三种方法最终得到的都是Unix时间戳,其中以ctime库的方法使用最为简单,但只能得到以秒为单位的时间戳,具体使用看需求。
  后续有其它方法再不断进行更新。

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值