C++时间函数小结
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即可。
日期转字符串
时间戳转为字符串分为两步:
struct tm *localtime(const time_t *timep)将time_t转换为tm结构体;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_wday和tm_yday成员,然后会自动纠正里面的错误,比如tm_mday天数设置为32超了一天,那么mktime会自动将其理解为下一个月的第一天。最后会将修正后的信息改写如传入的tm结构体中。
C++时间函数小结的更多相关文章
- mysql与oracle的日期/时间函数小结
前言 本文的日期/时间全部格式化为”2016-01-01 01:01:01“形式: MONITOR_TIME为数据库表字段: 字符串与日期/时间相互转换函数 Oracle 日期/时间转字符串函数:to ...
- linux系统编程之文件与IO(七):时间函数小结
从系统时钟获取时间方式 time函数介绍: 1.函数名称: localtime 2.函数名称: asctime 3.函数名称: ctime 4.函数名称: difftime 5.函数名称: gmtim ...
- SQLite3时间函数小结
import sqlite3 conn = sqlite3.connect('/tmp/sqlite.db') cur = conn.cursor() 接下来干嘛呢?建一张表吧.这里需要注意的是,SQ ...
- PHP函数之日期时间函数date()使用详解
date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考 日期时间函数是PHP 的核心组成部分.无需 ...
- php时间函数整理
PHP中的时间函数有这么些:(1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1 ...
- php时间函数
PHP中的时间函数有这么些:(1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1 ...
- PHP中日期时间函数date()用法总结
date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考. 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母 ...
- windows时间函数
介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记 ...
- javascript 时间函数整理
对Javascript日期的部分函数做个小结: var myDate = new Date();//定义时间函数 myDate.getYear(); //获取当前年份(2位) myDate.getF ...
随机推荐
- PIE保护绕过
(一):partial write 开了PIE保护的程序,其低12位地址是固定的,所以我们可以采用partial write.但是我们不能写入一个半字节,所以选择写入两个字节,倒数地位进行爆破,范围是 ...
- SpringBoot搭建环境
选择文件新建一个项目 选择:Spring Initializr,其他配置不变,点击下一步 这里一般写包名和项目名,这里我就默认,直接点击下一步 这里选择:Web --> Spring Web ...
- Java中AQS基本实现原理
一.AQS概述 AQS全名AbstractQueuedSynchronizer,意为抽象队列同步器,JUC(java.util.concurrent包)下面的Lock和其他一些并发工具类都是基于它来实 ...
- 还不懂Redis?看完这个故事就明白了!
我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上. 说起我的诞生,跟关系数据库MySQL还挺有渊源的. 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发 ...
- 修改mysql、oracle、sqlserver默认端口
一.修改mysql默认端口1202 1.修改mysql安装路径下的my.ini文件中的2个port值 2.修改后重启服务,win+r输入services.msc进入服务,重启服务 二.修改oracle ...
- 1. spring5源码 -- Spring整体脉络 IOC加载过程 Bean的生命周期
可以学习到什么? 0. spring整体脉络 1. 描述BeanFactory 2. BeanFactory和ApplicationContext的区别 3. 简述SpringIoC的加载过程 4. ...
- 一次MySQL索引失效引发的思考
最近公司做了一个千万数量级的项目,由于要求性能比较高,每一个相对慢的查询都需要优化,项目经理是一个比较有经验的开发人员,基本上遇到问题都会先自行处理:或自己分析原因或网络寻求帮助. 但是项目平稳运行一 ...
- Vue 登录/登出以及JWT认证
1. 后端代码概览 server/router/index.js 请求 router.get('/getUserInfo', function (req, res, next) { // 登录请求 r ...
- 破壳漏洞(CVE-2014-6271)分析
受影响版本:GNU Bash 4.3及之前版本 影响范围:主流的Linux和MacOSX操作系统,与bash交互的各种应用程序,如HTTP,FTP,DHCP等等. 漏洞原理及POC验证: 1.bash ...
- ISCC2018 writeup(web)
比较数字大小 F12 修改maxlength为4 web01 strcmp()函数遇到数组会返回NULL 而PHP是弱类型语言 在==比较的时候,如果有数值的话会先将字符串转换为数值在进行比较,而N ...