time

time_t time (time_t* timer);

返回的值表示自1970年1月1日0时0分0秒(这个时间名叫 The Unix Epoch)起,到现在过去的时间,这里C/C++标准中并没有规定精度单位(linux和windows中单位是秒),也没有规定time_t的类型长度。

当time_t是32位有符号整型的时候,并且时间单位是秒,那么最大只能表示2038年1月19日3时14分8秒,也就是Y2038问题。

但在64位linux和windows上,time_t都是64位的,所以不用担心溢出问题,但是我在raspbian32位系统上测试,time_t是32位的,所以可能业界以后还是会引入新的类型来解决这一问题吧,或者升级64位操作系统就是解决方案?

gettimeofday

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

同样也是获取自1970年1月1日0时0分0秒,到现在过去的时间。并且将结果写入timeval结构中:

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

timezone参数已经过时了,所以直接传入nullptr即可。

日期转字符串

时间戳转为字符串分为两步:

  1. struct tm *localtime(const time_t *timep)将time_t转换为tm结构体;
  2. size_t strftime(char *s, size_t max, const char *format,const struct tm *tm)将tm结构体转换为指定格式字符串输出;

tm结构体:

成员 类型 含义 取值范围
tm_sec int 秒数 0-60*
tm_min int 分钟 0-59
tm_hour int 小时 0-23
tm_mday int 日期 1-31
tm_mon int 月份 0-11
tm_year int 年份
tm_wday int 星期几 0-6
tm_yday int 今年的第几天 0-365
tm_isdst int 夏令时标志

常用日期输出格式控制符:

控制符 说明 示例
%Y 年份 2020
%y 年份后两位 20
%m 月份(01-12) 04
%d 日期(01-31) 05
%H 24小时(00-23) 23
%I 12小时(01-12) 11
%M 分钟(00-59) 23
%S 秒数(00-59) 45

这里使用strftime时需要注意,该函数不是线程安全的,因为使用了全局共享的空间去返回结果。这时可以用linux和windows的可重入替代版本:

  • linux:struct tm *localtime_r(const time_t *timep, struct tm *result)
  • windows:struct tm *localtime_s(struct tm *result, const time_t *timep)

可以看到linux和windows的功能都是一样的,只是参数顺序不同。

字符串转日期

在linux系统上提供了char *strptime(const char *s, const char *format, struct tm *tm)函数,可以将字符串转换为tm结构体。

再用mktime就可以将tm结构体转换为time_t了,这里重点讲一下这个mktime,首先它会忽略掉tm_wdaytm_yday成员,然后会自动纠正里面的错误,比如tm_mday天数设置为32超了一天,那么mktime会自动将其理解为下一个月的第一天。最后会将修正后的信息改写如传入的tm结构体中。

C++时间函数小结的更多相关文章

  1. mysql与oracle的日期/时间函数小结

    前言 本文的日期/时间全部格式化为”2016-01-01 01:01:01“形式: MONITOR_TIME为数据库表字段: 字符串与日期/时间相互转换函数 Oracle 日期/时间转字符串函数:to ...

  2. linux系统编程之文件与IO(七):时间函数小结

    从系统时钟获取时间方式 time函数介绍: 1.函数名称: localtime 2.函数名称: asctime 3.函数名称: ctime 4.函数名称: difftime 5.函数名称: gmtim ...

  3. SQLite3时间函数小结

    import sqlite3 conn = sqlite3.connect('/tmp/sqlite.db') cur = conn.cursor() 接下来干嘛呢?建一张表吧.这里需要注意的是,SQ ...

  4. PHP函数之日期时间函数date()使用详解

    date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考   日期时间函数是PHP 的核心组成部分.无需 ...

  5. php时间函数整理

    PHP中的时间函数有这么些:(1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1 ...

  6. php时间函数

    PHP中的时间函数有这么些:(1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1 ...

  7. PHP中日期时间函数date()用法总结

    date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考. 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母 ...

  8. windows时间函数

    介绍        我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记 ...

  9. javascript 时间函数整理

    对Javascript日期的部分函数做个小结: var myDate = new Date();//定义时间函数 myDate.getYear();  //获取当前年份(2位) myDate.getF ...

随机推荐

  1. linux 用户、用户组的操作

    1.查看linux系统下的所有用户 方式一:grep bash /etc/passwd 方式二:查看etc/passwd文件,其他第三个参数大于500的都是用户自己新增的 vim /etc/passw ...

  2. 教会舍友玩 Git (再也不用担心他的学习)

    舍友长大想当程序员,我和他爷爷奶奶都可高兴了,写他最喜欢的喜之郎牌Git文章,学完以后,再也不用担心舍友的学习了(狗头)哪里不会写哪里 ~~~ 一 先来聊一聊 太多东西属于,总在用,但是一直都没整理的 ...

  3. 分别用canvas和css3的transform做出钟表的效果

    两种方式实际上在js上的原理都是一样的.都是获取时间对象,再获取时间对象的时分秒,时分秒乘以其旋转一刻度(一秒.一分.一小时)对应的角度.css3中要赋值于transform:rotate(角度),c ...

  4. spring boot之AOP

    首先,aop是面向对象切面,嗯,就是说不面向静态方法,我做测试demo的时候controller方法有个加了static,尴尬的是就用了那个方法测,检查了几遍配置... 参看这篇文章https://m ...

  5. 《InnoDB存储引擎》笔记

    第1章 Mysql体系结构和存储引擎 1.1 定义数据库和实例 数据库:database,物理的操作系统文件或其他形式文件类型的集合.当使用NDB存储引擎时,数据库文件可能是存放在内存中而不是磁盘之上 ...

  6. SpringBoot中的异步编程

    @Async 是什么 void test() { A(); B(); C(); } 复制代码 在没有Async的情况下,上面的方法是顺序执行的,也可以称为同步调用. B要在A执行完毕之后执行,C需要在 ...

  7. linux 重启服务器命令

    Linux有如下的关机和重启命令:shutdown, reboot,poweroff, halt shutdown shutdown命令是大家都推荐的一个安全的命令,通过参数-h或-r的配合来完成关机 ...

  8. element弹框的的this.$alert、this.$prompt方法用法

    调用$alert方法即可打开消息提示,它模拟了系统的 alert,无法通过按下 ESC 或点击框外关闭 调用$prompt方法即可打开消息提示,它模拟了系统的 prompt

  9. 基础篇:详解JAVA对象实例化过程

    目录 1 对象的实例化过程 2 类的加载过程 3 触发类加载的条件 4 对象的实例化过程 5 类加载器和双亲委派规则,如何打破双亲委派规则 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 对象的 ...

  10. Spring Boot 第三弹,一文带你了解日志如何配置?

    前言 日志通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节.但是,这丝毫不影响它在任何一个系统中的重要的地位. 今天就来介绍一下Spring Boot中的日志如何配置. Spr ...