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. PIE保护绕过

    (一):partial write 开了PIE保护的程序,其低12位地址是固定的,所以我们可以采用partial write.但是我们不能写入一个半字节,所以选择写入两个字节,倒数地位进行爆破,范围是 ...

  2. CVE-2020-0796(永恒之黑)漏洞复现

    声明:仅供学习与参考,请勿用于非法用途(后果自负) 一.影响范围(需关闭 Win10 防火墙): Windows 10 Version 1903 for 32-bit Systems Windows ...

  3. Spring Boot入门,源码解析

    目录 1.Spring Boot简介 2.微服务 3.Spring Boot HelloWorld 3.1 创建一个Maven工程 3.2 导入依赖Spring Boot相关的依赖 3.3 编写一个主 ...

  4. Spring IoC 到底是什么

    前言 「上一篇文章」我们对 Spring 有了初步的认识,而 Spring 全家桶中几乎所有组件都是依赖于 IoC 的. 刚开始听到 IoC,会觉得特别高大上,但其实掰开了很简单. 跟着我的脚步,一文 ...

  5. elasticsearch跨集群数据迁移

    写这篇文章,主要是目前公司要把ES从2.4.1升级到最新版本7.8,不过现在是7.9了,官方的文档:https://www.elastic.co/guide/en/elasticsearch/refe ...

  6. 为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

    写在前面 最近发现很多小伙伴对于工作中的一些基本工具的使用还不是很了解,比如:Git这个分布式的代码管理仓库,很多小伙伴就不是很了解,或者说不是很熟悉.甚至有些小伙伴都没听说过Git,就只会用个SVN ...

  7. JAVA JDK 环境变量配置 入门详解 - 精简归纳

    JAVA JDK 环境变量配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 13 转载请注明出处!️ 目录 JAVA JDK 环境变量配置 入门详解 - 精简归纳 一.为什么j ...

  8. Unity接入多个SDK的通用接口开发与资源管理(三)

    接着上篇,介绍SDK资源的导入.首先介绍一下Android Studio工程. AS工程可以由多个Module组成,我们可以把某个Module作为我们打包的Module,其他的Module当做资源导入 ...

  9. [LeetCode]11. 盛最多水的容器(双指针)

    题目 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...

  10. STL_Vector(向量)

    向量Vector 头文件 #include<vector> 作用: vector是一种顺序容器,与数组类似,但与之不同的是vector并不需要开辟内存空间,其类似于每存一个变量便开一个空间 ...