「C++系列」日期/时间

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程

文章目录

  • 一、日期/时间
    • 1. C++标准库(C++20之前)
      • `<ctime>`库中的关键组件:
    • 2. C++20 `<chrono>`库
      • `<chrono>`库中的关键组件:
    • 3. 第三方库
    • 示例代码(使用`<ctime>`)
  • 二、日期/时间的相关函数
  • 三、当前日期/时间
    • 1. 使用C++标准库(C++20之前)
    • 2. 使用C++20 `<chrono>` 和 `<format>`(如果可用)
    • 3. 使用第三方库
    • 使用{fmt}库和`<chrono>`格式化时间的示例(假设你有{fmt}库的支持)
  • 四、格式化日期/时间
    • 1. 使用C++标准库(C++20之前)
    • 2. 使用C++20 `<chrono>` 和 `<format>`(如果可用)
    • 3. 使用第三方库
  • 五、相关链接

一、日期/时间

在C++中处理日期和时间,有几种不同的方式,具体取决于你使用的C++标准版本(如C++98, C++11, C++17等)以及你是否愿意使用第三方库。

1. C++标准库(C++20之前)

在C++20之前,C++标准库本身并没有直接提供丰富的日期和时间处理功能。但是,你可以使用C语言风格的<ctime>库,它提供了一些基本的日期和时间处理功能。

<ctime>库中的关键组件:

  • time_t:表示时间的算术类型,通常是从某个固定时间点(如1970年1月1日)以来的秒数。
  • tm结构体:包含了一个分解的时间,包括年、月、日、小时、分钟、秒等。
  • clock()函数:返回程序启动到函数调用时的处理器时间。
  • time()函数:获取当前时间(自1970年1月1日以来的秒数)。
  • localtime()gmtime()函数:将time_t值转换为本地时间和UTC时间(tm结构体)。
  • difftime()函数:计算两个时间点之间的差异(以秒为单位)。
  • strftime()函数:将tm结构体中的时间格式化为字符串。

2. C++20 <chrono>

C++20引入了更强大的日期和时间库<chrono>,它提供了更精确的时间点(time_point)、持续时间(duration)和时钟(clock)的表示。

<chrono>库中的关键组件:

  • std::chrono::system_clockstd::chrono::steady_clockstd::chrono::high_resolution_clock等时钟类型。
  • std::chrono::time_point:表示一个时间点。
  • std::chrono::duration:表示两个时间点之间的时间间隔。
  • std::chrono::secondsstd::chrono::milliseconds等持续时间类型。
  • std::chrono::format(C++20中未直接提供,但可以通过第三方库如datefmt库实现格式化)。

3. 第三方库

由于C++标准库在日期和时间处理方面的限制,许多开发者选择使用第三方库,如:

  • Boost.Date_Time:Boost库的一部分,提供了丰富的日期和时间处理功能。
  • Howard Hinnant/date:一个轻量级的日期库,后来被纳入C++20标准库(作为<chrono>的一部分的灵感来源)。
  • fmtlib:一个现代C++格式化库,也支持日期和时间的格式化。

示例代码(使用<ctime>

#include <iostream>
#include <ctime>int main() {// 获取当前时间std::time_t now = std::time(nullptr);// 转换为本地时间std::tm* local = std::localtime(&now);// 格式化时间char buffer[80];std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %X", local);std::cout << "Current time: " << buffer << std::endl;return 0;
}

二、日期/时间的相关函数

序号函数 & 描述
1time_t time(time_t *time),该函数返回系统的当前日历时间,自 1970 年 1 月 1 日以来经过的秒数。如果系统没有时间,则返回 -1。
2char *ctime(const time_t *time),该返回一个表示当地时间的字符串指针,字符串形式 day month year hours:minutes:seconds year\n\0。
3struct tm *localtime(const time_t *time),该函数返回一个指向表示本地时间的 tm 结构的指针。
4`clock_t clock(void);该函数返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。如果时间不可用,则返回 -1。
5char * asctime ( const struct tm * time ),该函数返回一个指向字符串的指针,字符串包含了 time 所指向结构中存储的信息,返回形式为:day month date hours:minutes:seconds year\n\0。
6struct tm *gmtime(const time_t *time),该函数返回一个指向 time 的指针,time 为 tm 结构,用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
7time_t mktime(struct tm *time),该函数返回日历时间,相当于 time 所指向结构中存储的时间。
8double difftime ( time_t time2, time_t time1 ),该函数返回 time1 和 time2 之间相差的秒数。
9size_t strftime(),该函数可用于格式化日期和时间为指定的格式。

三、当前日期/时间

在C++中,获取当前日期和时间可以通过多种方式实现,具体取决于你使用的C++标准版本以及你是否愿意使用第三方库。

1. 使用C++标准库(C++20之前)

在C++20之前,标准库本身并没有直接提供丰富的日期和时间处理功能,但你可以使用C语言风格的<ctime>库。

#include <iostream>
#include <ctime>int main() {// 获取当前时间std::time_t now = std::time(nullptr);// 转换为本地时间std::tm* local = std::localtime(&now);// 格式化时间(注意:%Y-%m-%d %H:%M:%S 是年-月-日 时:分:秒的格式)char buffer[80];std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);std::cout << "Current date and time: " << buffer << std::endl;return 0;
}

2. 使用C++20 <chrono><format>(如果可用)

C++20引入了<chrono>库用于处理时间,并且<format>库(虽然作为技术规范TS实现,并非所有编译器都直接支持)可以用于格式化时间。但是,请注意,<format>库在C++20标准中并不是核心部分,可能需要额外的库支持(如{fmt}库)。

然而,C++20标准库本身并没有直接提供将std::chrono::system_clock::time_point格式化为可读日期字符串的功能。你需要自己实现或使用第三方库。

但是,你可以使用<chrono>来获取当前时间点,并使用其他方式(如<ctime>或第三方库)来格式化它。

3. 使用第三方库

  • Boost.Date_Time:Boost库的一部分,提供了丰富的日期和时间处理功能,包括格式化。
  • Howard Hinnant/date(现在是C++20 <chrono>的灵感来源):虽然它本身是一个独立的库,但它的许多概念都已经被C++20采纳。
  • {fmt}:一个现代C++格式化库,它支持自定义类型(包括时间类型)的格式化。你可以结合使用<chrono>{fmt}来格式化时间。

使用{fmt}库和<chrono>格式化时间的示例(假设你有{fmt}库的支持)

#include <fmt/chrono.h>
#include <iostream>
#include <chrono>int main() {using namespace std::chrono;// 获取当前时间点auto now = system_clock::now();// 使用{fmt}库格式化时间std::string formatted_time = fmt::format("{:%Y-%m-%d %H:%M:%S}", now);std::cout << "Current date and time: " << formatted_time << std::endl;return 0;
}

请注意,为了使用{fmt}库,你可能需要安装它并正确配置你的项目以包含它。

四、格式化日期/时间

在C++中,格式化日期/时间可以通过多种方式实现,具体取决于你使用的C++标准版本以及你是否愿意使用第三方库。以下是几种常见的方法:

1. 使用C++标准库(C++20之前)

在C++20之前,标准库中没有直接支持日期/时间格式化的高级功能。但是,你可以使用<ctime>库结合strftime函数来格式化时间。

#include <iostream>
#include <ctime>int main() {// 获取当前时间std::time_t now = std::time(nullptr);// 转换为本地时间std::tm* local = std::localtime(&now);// 格式化时间char buffer[80];std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);std::cout << "Formatted date and time: " << buffer << std::endl;return 0;
}

2. 使用C++20 <chrono><format>(如果可用)

C++20引入了<chrono>库用于时间处理,但<format>库(作为技术规范TS实现)并非所有编译器都直接支持。不过,你可以使用第三方库如{fmt},它提供了类似<format>的功能,并且可以与<chrono>一起使用来格式化时间。

请注意,C++20标准本身并没有直接提供将std::chrono::system_clock::time_point转换为格式化字符串的函数,但你可以通过转换为std::time_t然后使用std::localtime(或std::gmtime)和std::strftime,或者使用第三方库来实现。

然而,如果你使用的是支持<format>或类似功能的编译器/库,你可以这样做:

#include <fmt/core.h> // 假设你使用的是{fmt}库
#include <fmt/chrono.h> // {fmt}库中对chrono的支持(如果可用)
#include <iostream>
#include <chrono>
#include <ctime>int main() {using namespace std::chrono;// 注意:{fmt}库可能不直接支持system_clock::time_point的格式化// 但你可以转换为time_t,然后使用strftime,或者等待{fmt}库的更新// 获取当前时间点auto now = system_clock::now();// 转换为time_t(如果需要与strftime一起使用)auto now_c = system_clock::to_time_t(now);// 使用{fmt}库格式化(这里我们仍然使用strftime作为示例,因为{fmt}直接支持可能有限)std::tm* local = std::localtime(&now_c);char buffer[80];std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);std::cout << "Formatted date and time (using strftime): " << buffer << std::endl;// 或者,如果{fmt}库未来版本支持,你可以直接使用fmt::format来格式化chrono::time_point// 例如:std::string formatted = fmt::format("{:%Y-%m-%d %H:%M:%S}", now); // 假设的语法return 0;
}

但是,请注意上面的{fmt}::format示例语法是假设的,因为{fmt}库(截至我最后的知识更新)并不直接支持std::chrono::system_clock::time_point的格式化。你可能需要先将time_point转换为std::time_t,然后如上所示使用std::strftime,或者等待{fmt}库的更新以提供对chrono的直接支持。

3. 使用第三方库

除了{fmt}之外,还有其他第三方库可以用于格式化日期/时间,如Boost.Date_Time或Howard Hinnant的date库(后者现在是C++20 <chrono>的灵感来源之一)。这些库通常提供了更强大、更灵活的日期/时间处理功能,包括格式化。
在这里插入图片描述

五、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C++系列」C++简介、应用领域
  4. 「C++系列」C++ 基本语法
  5. 「C++系列」C++ 数据类型
  6. 「C++系列」C++ 变量类型
  7. 「C++系列」C++ 变量作用域
  8. 「C++系列」C++ 常量知识点-细致讲解
  9. 「C++系列」C++ 修饰符类型
  10. 「C++系列」一篇文章说透【存储类】
  11. 「C++系列」一篇文章讲透【运算符】
  12. 「C++系列」循环
  13. 「C++系列」判断
  14. 「C++系列」函数/内置函数
  15. 「C++系列」数字/随机数
  16. 「C++系列」数组
  17. 「C++系列」字符串
  18. 「C++系列」指针
  19. 「C++系列」引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419076.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lnmp - tp6.0的安装和简单使用

概述 使用了很长时间的Mac M2芯片的电脑在之前使用虚拟机之前总有一些bug不是那么好用&#xff0c;周末之余重新安装了一下centos虚拟机&#xff0c;搭建了lnmp环境&#xff0c;打算自己挤时间&#xff0c;做一点应用&#xff0c;作为一次新的小小的尝试。 安装&更新 ce…

OCC开发_变高箱梁全桥建模

概述 上一篇文章《OCC开发_箱梁梁体建模》中详细介绍了箱梁梁体建模的过程。但是&#xff0c;对于实际桥梁&#xff0c;截面可能存在高度、腹板厚度、顶底板厚度变化&#xff0c;全桥的结构中心线存在平曲线和竖曲线。针对实际情况&#xff0c;通过一个截面拉伸来实现全桥建模显…

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念&#xff1a;算法复杂度 三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例 四、空间复杂度 计算示例&#xff1a;空间复杂度 五、常见复杂度对比 六、复杂度算法题&…

《JavaEE进阶》----12.<SpringIOCDI【扫描路径+DI详解+经典面试题+总结】>

本篇博客主要讲解 扫描路径 DI详解&#xff1a;三种注入方式及优缺点 经典面试题 总结 五、环境扫描路径 虽然我们没有告诉Spring扫描路径是什么&#xff0c;但是有一些注解已经告诉Spring扫描路径是什么了 如启动类注解SpringBootApplication。 里面有一个注解是componentS…

【学习笔记】3GPP WG SA5 Rel-19标准化工作管理和编排

3GPP WG SA5 Rel-19标准化工作涵盖了管理和编排要求、管理阶段2和管理流程&#xff0c;以及阶段3 OpenAPI和YANG解决方案集&#xff0c;以在多供应商环境中为5G网络提供完整的管理互操作性能力。 SA5以WG SA1通过紧密跟踪其他3GPP工作组的进展&#xff0c;这些工作组产生新的网…

如何使div居中?CSS居中终极指南

前言 长期以来&#xff0c;如何在父元素中居中对齐一个元素&#xff0c;一直是一个让人头疼的问题&#xff0c;随着 CSS 的发展&#xff0c;越来越多的工具可以用来解决这个难题&#xff0c;五花八门的招式一大堆&#xff0c;这篇博客&#xff0c;旨在帮助你理解不同的居中方法…

【机器人工具箱Robotics Toolbox开发笔记(二)】Matlab中机器人工具箱的下载与安装

Matlab机器人工具箱(Robotics Toolbox)可从Peter Corke教授提供的网站上免费下载。网址为:http://www.petercorke.com/Robotics_Toolbox.html。 图1 网站所提供的机器人工具箱版本 在Downloading the Toolbox栏目中单击here按钮进入下载页面,然后在该页面中填写国家、组织…

Qt多语种开发教程

Qt作为跨平台的开发工具&#xff0c;早已应用到各行各业的软件开发中。 今天讲讲&#xff0c;Qt开发的正序怎么做多语言开发。就是说&#xff0c;你设置中文&#xff0c;就中文显示&#xff1b;设置英语就英文显示&#xff0c;设置繁体就繁体显示&#xff0c;设置发育就显示法语…

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务&#xff0c;使用API接口查询京东物流的便捷步骤&#xff0c;首先选择专业的数据平台的快递API接口&#xff1a;物流快递查询API接口-单号查询…

【C语言】详解结构体(下)(位段)

文章目录 前言1. 位段的含义2. 位段的声明3. 位段的内存分配&#xff08;重点&#xff09;3.1 存储方向的问题3.2 剩余空间利用的问题 4. 位段的跨平台问题5. 位段的应用6. 总结 前言 相信大部分的读者在学校或者在自学时结构体的知识时&#xff0c;可能很少会听到甚至就根本没…

win10不用anaconda安装tensorflow-cpu并导入pycharm

记录一下防止忘了 一、前提&#xff1a;已经安装了python3.6.4,想用tensorflow的包 二、在pycharm中File-Settings-Project Interpreter点“”号导入很慢&#xff0c;所以直接在cmd中使用 pip install -i https://mirrors.aliyun.com/pypi/simple tensorflow-cpu下载好&#x…

2024AI绘画工具排行榜:探索最受欢迎的AI绘图软件特点与选择指南

AI绘画工具各有优势&#xff0c;从开放性到对特定语言和文化的支持&#xff0c;以及对图像细节和艺术性的不同关注点&#xff0c;根据具体需求选择合适的工具 MidJourney 图片品质卓越&#xff0c;充满独特创意&#xff0c;初期能够免费获取数十账高质量图片&#xff0c;整个生…

(一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别

🍂1、不说废话,现象展示 🍃图片识别 🍃视频识别 自己训练样本 十分简易快速 opencv级联ha

前端:Vue3学习-2

前端:Vue3学习-2 1. vue3 新特性-defineOptions2. vue3 新特性-defineModel3. vue3 Pinia-状态管理工具4. Pinia 持久化插件 -> pinia-plugin-persistedstate 1. vue3 新特性-defineOptions 如果要定义组件的name或其他自定义的属性&#xff0c;还是得回归原始得方法----再…

页面要突破手机安全区域来全屏显示(沉浸式模式显示),其他页面不需要,如何设置安全区域文字颜色

#效果图 ##思路遇到的问题 在aboutToAppear中使用window模块的 getLastWindow 和 setWindowLayoutFullScreen两个方法来处理全屏显示 设置沉浸式模式的特点&#xff1a; 在任何一个页面中设置过一次之后&#xff0c;其他页面也会跟着全屏显示 这么处理会出现问题&#xff1a…

实验七 期中练习

实验目的及要求 目的&#xff1a;掌握File类的作用和使用方法&#xff0c;掌握运用文件字节输入输出流对文件进行操作&#xff0c;综合运用学过的知识。 要求&#xff1a; &#xff08;1&#xff09;编写FileDemo类测试File类的常用方法 &#xff08;2&#xff09;用FileOu…

2024国赛数学建模-模拟火算法(MATLAB 实现)

模拟退火算法 1.1 算法原理 模拟退火算法的基本思想是从一给定解开始 ,从邻域 中随机产生另一个解 ,接受 Metropolis准则允许目标函数在 有限范围内变坏 ,它由一控制参数 t决定 ,其作用类似于物 理过程中的温度 T,对于控制参数的每一取值 ,算法持续进 行“产生 —判断 —接受…

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合 1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实…

oracle数据块内部结构详解

文章目录 Oracle数据块详解概述Oracle块具有以下特点&#xff1a;① 最小的I/O单元&#xff1b;② 包含一个或多个OS块&#xff1b;③ 大小由参数DB_BLOCK_SIZE决定&#xff1b;④ 数据库创建时设置&#xff0c;数据库创建后不能更改 Oracle数据块详解 概述 操作系统块是…

音频-语言大模型原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…