C++中各种时间转换实例

timeval精确到微秒 (在time.h中)

struct timeval 
{
    time_t    tv_sec;   /* seconds */ long
    suseconds_t  tv_usec; /* microseconds */ long
};

2、常用的时间函数  

#include<time.h>
#include<sys/time.h>
#include<iostream>
#include<thread>

int main()
{
    time_t time(NULL);
    std::cout<<time<<std::endl; //0
    ::time(&time); //取得从1970年1月1日至今的秒数
    std::cout<<time<<std::endl; //1550038698

    //char *ctime(const time_t *timep); //以字符串的形式显示
    std::cout<<ctime(&time)<<std::endl; //Wed Feb 13 14:18:18 2019

    //struct tm *gmtime(const time_t *timep); //转换为没有经过时区转换的UTC时间
    struct tm *gtm = gmtime(&time);
    //char *asctime(const struct tm *tm); //以字符串的形式显示
    std::cout<<asctime(gtm)<<std::endl; //Wed Feb 13 06:18:18 2019

    //struct tm *localtime(const time_t *timep); //经过时区转换的时间。
    struct tm *ltm = localtime(&time);
    std::cout<<asctime(ltm)<<std::endl; //Wed Feb 13 14:18:18 2019

    //time_t mktime(struct tm *tm); //转换为从1970年至今的秒数
    time_t gt = mktime(gtm);
    std::cout<<gt<<std::endl; //1550038698
    time_t lt = mktime(ltm);
    std::cout<<lt<<std::endl; //1550038698

    std::this_thread::sleep_for(std::chrono::seconds(1));

    //返回当前距离1970年的秒数和微秒数,后面的tz是时区,一般不用。#include<sys/time.h>
    //int gettimeofday(struct timeval *tv, struct timezone *tz);
    timeval tv;
    gettimeofday(&tv, NULL);
    std::cout<<tv.tv_sec<<std::endl; //1550038699
    std::cout<<tv.tv_usec<<std::endl;//262911

    //double difftime(time_t time1, time_t time2); //秒数 time1-time2
    std::cout<<difftime(tv.tv_sec, time)<<std::endl;// 1
    std::cout<<tv.tv_sec - time<<std::endl;// 1
}

4、关于localtime与localtime_r的区别

struct tm *localtime(const time_t *timep);

返回的是一个指针,实际的内存是localtime内部通过static申请的静态内存,线程不安全

struct tm *localtime_r(const time_t *timep, struct tm *result);

localtime_r则是由调用者在第二个参数传入一个struct tm result指针,

多线程应用里面,应该用localtime_r函数替代localtime函数,因为localtime_r是线程安全的。

其他的时间函数,如asctime,asctime_r;ctime,ctime_r;gmtime,gmtime_r都是类似的,所以,时间函数的 _r 版本都是线程安全的。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值