C/C++ time处理及其相互转换

发布时间:2021-08-05 05:00:22

C 的时间
time_point

时间单位默认是秒,绝对时间获取的时间点都是相对新纪元。相关概念:


新纪元:1970年1月1日00:00:00 UTC(GMT)


#include

typedef long time_t //时间点,秒单位

time_t time(time_t *t) //返回自从新纪元以来流逝的秒数,将当前时间点写入到t


/***************************/
// 少用
#include

struct timeval {
time_t tv_sec; // 秒
susenconds_t tv_usec; // 微秒
}

int gettimeofday(struct timeval *tv,
struct timezone *tz);


/***************************/
// 常用
#include

struct timespec {
time_t tv_sec; // 秒
long tv_nsec; // 纳秒
}

int clock_gettime(clockid_t clock_id,
struct timespec *ts);


/***************************/
// 时间差
double difftime(time_t time1, time_t time0);

tm 是人们容易理解的时间格式


#include

struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday; /*该月的日期,0~31*/
int tm_mon; /*0~11*/
int tm_year; /*从1900年以来的年数*/
int tm_wday; /*从周日以来的天数 0~6*/
int tm_yday; /*从1月1日以来的日期数 0~356*/
int tm_isdst;
#ifdef _BSD_SOURCE
long tm_gmtoff;
const char *tm_zone;
#endif /* _BSD_SOURCE */
};

时间字符串表达:

char * asctime(const struct tm *tm); // tm -> str

char * ctime(const time_t *timep); // time_t -> str

struct tm * localtime(const time_t *timep); // time_t -> tm

time_t mktime(struct tm *tm); // tm -> time_t

C++

std::chrono是一个Time library,同时c库的在c++里表示为。c++版本封装了不同单位的时间功能,忽略了获取的时间是秒、还是微秒抑或是纳秒的概念


分为三个模块


Durations

默认是秒:


typedef std::chrono::duration seconds_type;
typedef std::chrono::duration milliseconds_type;
typedef std::chrono::duration> hours_type;

std::chrono::seconds
std::chrono::milliseconds


std::chrono::hours = typedef duration> hours;
std::chrono::minutes = typedef duration> minutes;
std::chrono::seconds = typedef duration> seconds;
std::chrono::milliseconds = typedef duration> milliseconds;
std::chrono::microseconds = typedef duration> microseconds;
std::chrono::nanoseconds = typedef duration> nanoseconds;

不同单位的转换? std::chrono::duration_cast,例子


std::chrono::seconds s = std::chrono::duration_cast (std::chrono::milliseconds ms);

将当前milliseconds转成seconds


c的time_t 为long 型,可以直接输出,而durations需要使用count()方法输出


?


Time points

std::chrono::system::clock::time_point today = std::chrono::system_clock::now();

time_t tt;

tt = system_clock::to_time_t ( today );
std::cout << "today is: " << ctime(&tt);

获取now()的epoch时间,epoch即从1970年1月1日00:00:00以来的格林尼治时间,需要注意这里的时区问题


std::chrono::system_clock::now().time_since_epoch()
Clocks

std::chrono::system_clock相当于C的CLOCK_REALTIME


std::chrono::steady_clock相当于C的CLOCK_MONOTONIC


std::chrono::high_resolution_clock 高精度版本,但是It may be a synonym for system_clock or steady_clock.[cplusplus.com]


三个static member functions


std::chrono::system_clock::now() // get current time
C++时间与C时间的转换

time_t std::chrono::system_clock::to_time_t(const time_point& tp);

time_point std::chrono::system_clock::from_time_t(time_t t)

UTC和CST的影响

time_since_epoch这个时间是获取从1970.1.1以来UTC的duration。 就是说如果该机子使用的是UTC时间,那么time_since_epoch就是UTC的duration,但是如果该机子使用了CST时间,那么time_since_epoch.count()的具体过程:先将CST推算出UTC时间,即CST - 8个时区,之后得到就是现在的UTC时间和1970.1.1的UTC时间的duration。为了避免同时区造成的影响,使用做差时间。本机用时间函数将1970.1.1转成time_point,再用get_now()与之做差得到duration,去掉了时区的影响。如果本机直接使用UTC时间,time_since_epoch也是UTC,两者单位都是UTC,自然没有影响


?

相关文档

  • 喜欢花花的是什么派
  • 小学作文:如果我是一只小小鸟
  • HTML之网页布局与设计技巧
  • 社区居住证明
  • 零食应该怎样吃才健康
  • 自我总结怎么写
  • 绝地枪王经典台词_于毅周扬绝地枪王台词语录
  • 软件生命周期模型??瀑布模型
  • Windows下python2与python3兼容性完美解决办法
  • 什么是文本的词嵌入?
  • 摩羯座的个性是怎样的
  • Mysql union和union all的区别
  • 编程任务编号 O: 回文素数(基础版)
  • c++调用python: unresolved external symbol __imp__Py_RefTotal
  • DataFrame与RDD的区别
  • 英语自我介绍听力 职中英语自我介绍
  • 播种与收获名人名言
  • 李镇西报告学习心得
  • 19-java笔记-多线程
  • 抖音草稿箱打不开怎么办
  • 农民创业带头事迹材料
  • 诗意地生活随笔
  • 使用vue-seamless-scroll做无缝滚动,echarts无法显示
  • 宏定义中的#、##含义
  • 你的java程序有没有内存泄露,java进程在linux系统中rss计算方式是什么样的?
  • 精品迟到检讨书7篇
  • Matlab生成随机矩阵
  • Jupyter notebook设置背景主题、字体大小及自动补全代码
  • 对老年人的生日祝福
  • Maven打包跳过测试
  • 猜你喜欢

  • 最新冀教版小学英语四年级下册Lesson2 Is this your pencil 公开课教学设计
  • 男人肾虚吃点什么菜好
  • 广宁住房和城乡规划建设局部门2018年度行政执法数据
  • 船舶有限公司成立可行性研究报告 (3)
  • 【最新精选合同范本】动产质押担保合同_1
  • 感恩的心作文300字
  • 关于微笑的小学生作文:带着微笑出发
  • 2018年高考志愿填报说明(1)
  • 教师考编教育法规试题
  • smb协议讲解_SMB协议操作共享文件
  • 海口美兰机场航煤输油管线美安科技新城段改线项目环境影响报告表word精品文档73页
  • 大学政法系辩论赛策划书范本_1
  • 关于大学生人际关系调查报告
  • 请问关于公文格式的问题
  • 报关员考试辅导讲义第9讲
  • 手写一个Tomcat
  • 【2018-2019】县纪委第一季度工作总结-推荐word版 (6页)
  • 铝合金薄板焊后碾压控制焊接应力变形的数值模拟
  • 2010医院健康教育工作计划
  • 发展党参种植,实现脱贫增收致富——皮忠正脱贫典型材料
  • 【国家自然科学基金】_苔草沼泽_基金支持热词逐年推荐_【万方软件创新助手】_20140802
  • 复旦法硕考研参考书哪里有
  • orCAD原理图规范
  • 浙江选考2019届高考生物 9细胞的分化、衰老、凋亡和癌变复*课件
  • 南方医科大学附属广东燕岭医院
  • 榆林市昌荣新型建材有限公司企业信用报告-天眼查
  • 机械电子工程毕业设计任务书
  • 以思乡情为话题精彩范文600字
  • 2019精品贵溪第二小学饶样秀数学
  • 硬盘系统盘符显示交叉现象的解决方法
  • 酒店员工培训团队精神
  • 春季幼儿饮食怎样搭配
  • 【20套试卷合集】山东省青岛市2019-2020学年数学高一上期中模拟试卷含答案
  • 【最新苏科版精选】苏科初中数学八上《4.3 实数》PPT课件 (2).ppt
  • 河南卤鼎记食品有限公司(企业信用报告)- 天眼查
  • 2012黄冈中考数学科目考试说明
  • 蓝牙4.1的耳机能和蓝牙4.0的手机连接吗
  • 余世维—如何突破自己的工作瓶颈
  • 2021最新JavaP5-P8学习完整路线,强烈建议收藏转发
  • 蓑衣黄躬璺燮さ淖龇ā靖髦中〕缘氖称住
  • 江西省森林病虫鼠害防治情况及发生面积-森林虫害(公顷)
  • 六年级对自己说的毕业寄语大全
  • 电脑版