IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> ?? c++获取当前时间,这有一个小细节! ?? -> 正文阅读

[C++知识库]?? c++获取当前时间,这有一个小细节! ??

c++ 获取当前时间

1、基础概念

  • 时间戳

时间戳,是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

typedef __int64 __time64_t;

typedef __time64_t time_t;

在c++中我们定义的数据类型time_t就是时间戳。目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。这很可能会引起软件故障,甚至是系统瘫痪。使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。
在这里插入图片描述

所以c++的源码中time_t定义为了64位的int,有意思的知识又增加了!这波是真的细!

  • 存储结构

c++使用一个名为tm的结构体存储时间,其中年份是从1900年起至今多少年,而不是直接存储如2011年,月份从0开始的,0表示一月,星期也是从0开始的, 0表示星期日,1表示星期一。

struct tm
{
    int tm_sec;  /*秒,正常范围0-59, 但允许至61*/
    int tm_min;  /*分钟,0-59*/
    int tm_hour; /*小时, 0-23*/
    int tm_mday; /*日,即一个月中的第几天,1-31*/
    int tm_mon;  /*月, 从一月算起,0-11*/  1+p->tm_mon;
    int tm_year;  /*年, 从1900至今已经多少年*/  1900+ p->tm_year;
    int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6*/
    int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/
    int tm_isdst; /*日光节约时间的旗标*/
};

2、应用举例

  • 头文件

#include <time.h>

  • 输出时间

输出一个yy/mm/dd hh:mm:ss格式的当前时间

#include <iostream>
#include <string>
#include <time.h>

std::string GetNowTime() {
	time_t setTime;
	//获取时间戳
	time(&setTime);
	tm ptm;
	//通过时间戳计算得到当前时间
	localtime_s(&ptm, &setTime);
	std::string time = std::to_string(ptm.tm_year + 1900)
		+ "/"
		+ std::to_string(ptm.tm_mon + 1)
		+ "/"
		+ std::to_string(ptm.tm_mday)
		+ " "
		+ std::to_string(ptm.tm_hour) + ":"
		+ std::to_string(ptm.tm_min) + ":"
		+ std::to_string(ptm.tm_sec);
	return time;
}

//test
int main(int argc, char *argv[]) {
	std::string strTime = GetNowTime();
	std::cout << "now time: " << strTime << std::endl;
	system("pause");
	return 0;
}
  • localtime、localtime_s和localtime_r的区别和使用

localtime、localtime_s、localtime_r都是用于获取系统时间,其中localtime_r用于Linux平台下获取系统时间localtime_s用于Windows平台获取系统时间,而localtime获取系统时间不区分系统。

在不涉及多线程,且只有一个系统时间的情况下,比如获取系统当前时间,使用localtime即可;但是在需要将多个时间转化为系统时间的格式,或者是多线程中使用时,应该根据系统类型选择使用localtime_s或localtime_r
在这里插入图片描述

注:至于为什么会特意提到这三长得几乎一样的函数这件事,其实是localtime编译直接告诉我不安全,那我想不安全换一个呗,需求还能不写了不成?度娘告诉我localtime_s能行,于是windows写代码的时候它是真的行,但是换linux部署的时候就凉凉咯,又换成了localtime_r。所以我决定给它三直接挂网上网b一波,兄弟们我做的对吗?

?? 来都来了,不点个赞吗,不点点关注吗,不唠两句嗑吗?灰常感谢!!! ??

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:27:16  更:2021-07-29 11:27:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/29 3:29:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码