Boost之date_time

Boost.Date_Time库是一个功能丰富的时间日期处理库,它提供了多种用于日期和时间计算、格式化、转换和输入输出的功能。以下是该库的一些详细介绍:

1、日期处理

  • Boost.Date_Time库中的date类基于格里高利历(Gregorian calendar),支持从1400年1月1日到9999年12月31日的日期计算。
  • 使用<boost/date_time/gregorian/gregorian.hpp>头文件可以处理日期相关的操作,如获取当前日期、日期的加减运算等。

2、时间处理

  • posix_time是处理时间的类,使用<boost/date_time/posix_time/posix_time.hpp>头文件,可以表示时间点,并支持时间的加减运算等操作。
  • 时间长度可以通过date_duration类来表示,它允许进行时间的间隔计算,如两个时间点之间的差值等。

3、时间点

  • ptime类结合了日期和时间,可以用来表示具体的时间点,例如某一天的某个时刻。

4、时间格式化与解析

  • 库中提供了时间和日期的格式化和解析功能,可以将时间日期对象转换为字符串,或者从字符串中解析出时间日期对象。

5、时间间隔

  • date_duration类用于表示时间间隔,可以进行时间间隔的加减运算,以及与其他时间间隔的比较等操作。

时间库中的一些概念:

  1. date:这是基于格里高利历的日期类,它支持从1400年1月1日到9999年12月31日之间的日期计算。使用这个类,可以进行日期的加减、比较等操作。要使用date类,需要包含头文件<boost/date_time/gregorian/gregorian.hpp>
  2. ptime:这是一个结合了日期和时间的时间点类,它可以用来表示具体的时间点,例如某一天的某个时刻。ptime类非常适合用于记录事件发生的具体时间,或者进行时间点的计算和比较。
  3. date_period:这是一个表示日期区间的类,它可以用来表示一段时间范围,比如“2023年的整个夏天”或者“去年的前三个月”。date_period类可以用于执行如迭代这段时间内每一天的操作。
  4. date_durationdate_duration用来表示一段时间的长度,它独立于任何特定的时间点,只包含时间的长度信息。它可以用来表示天、小时、分钟或秒等多种不同的时间单位,并支持这些单位之间的转换。通过date_duration可以方便地对时间进行加减,也可以计算两个时间长度的总和或差值

代码示例:

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time.hpp>
#include <iostream>
#include <sstream>
using namespace std;
using namespace boost;
using namespace boost::date_time;string to_string(posix_time::ptime t){stringstream ss;ss.fill('0');ss << t.date().year() << "-" << setw(2) << t.date().month().as_number() << "-" << setw(2) << t.date().day().as_number() << " " << setw(2) << t.time_of_day().hours() << ":" << setw(2) << t.time_of_day().minutes() << ":" << setw(2) << t.time_of_day().seconds() << "." << setw(6) << t.time_of_day().fractional_seconds();return ss.str();
}string to_string(posix_time::time_period tp){ostringstream os;os << to_string(tp.begin()) << "<-->" << to_string(tp.end());return os.str();
}int main(){//字符串转时间posix_time::ptime t1 = posix_time::time_from_string("2024-03-05 02:03:04.009");  //1400至9999年posix_time::ptime t2 = posix_time::from_iso_extended_string("2024-03-05T02:03:04.005678");posix_time::ptime t3 = posix_time::from_iso_string("20240305T020304.045678");auto t4 = posix_time::second_clock::local_time();auto t5 = posix_time::microsec_clock::local_time();auto t6 = posix_time::second_clock::universal_time();auto t7 = posix_time::microsec_clock::universal_time();auto t8 = posix_time::from_time_t(time(0));cout << to_string(t1) << endl;cout << to_string(t2) << endl;cout << to_string(t3) << endl;cout << to_string(t4) << endl;cout << to_string(t5) << endl;cout << to_string(t6) << endl;cout << to_string(t7) << endl;cout << to_string(t8) << endl;cout << "--------------" << endl;//时间转字符串    cout << posix_time::to_iso_extended_string(t1) << endl;cout << posix_time::to_iso_string(t1) << endl;cout << posix_time::to_simple_string(t1) << endl;cout << posix_time::to_time_t(t1) << endl;//时间点 + 时间长度posix_time::ptime ptNow = posix_time::second_clock::local_time();auto ptResult = ptNow + gregorian::days(100) + posix_time::hours(1) + posix_time::minutes(1) + posix_time::seconds(1) + posix_time::microseconds(456561);cout << "当前时间:" << to_string(ptNow) << ", 100天1小时1分1秒456561微秒后的时间是:" << to_string(ptResult) << endl;//时间段,比如今年剩下的时间posix_time::time_period tp1(ptNow, posix_time::ptime(gregorian::date(2025,01,01)));cout << tp1 << endl;//时间段的时长是多少?cout << "今年所剩时长(小时数):" << tp1.length().hours() << endl;//判断某一个时间点是否在时间段内cout << tp1.contains(posix_time::time_from_string("2024-08-01 00:00:00")) << endl;cout << tp1.contains(posix_time::time_from_string("2024-03-01 00:00:00")) << endl;//时间段的交集posix_time::time_period tp2(posix_time::time_from_string("2024-03-15 00:00:00"), posix_time::time_from_string("2024-05-05 00:00:00"));cout << "时间段:" << to_string(tp1) << "和时间段" << to_string(tp2) << "的交集是:" << to_string(tp2.intersection(tp1)) << endl;//时间段的并集cout << "时间段:" << to_string(tp1) << "和时间段" << to_string(tp2) << "的并集是:" << to_string(tp2.merge(tp1)) << endl;//时间遍历(迭代)posix_time::time_iterator it(ptNow, posix_time::seconds(25)); //25秒为步长posix_time::ptime ptEnd = ptNow + posix_time::minutes(2);     //2分钟为总遍历长度while(it < ptEnd){cout << to_string(*it) << endl;++it;}return 0;
}

程序输出:

        

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

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

相关文章

MySQL基础知识——MySQL日志

一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块&#xff0c; 最后到达存储引擎。 那么&#xff0c; 一条更新语句的执行流程又是怎样的呢&#xff1f; 下面我们从一个表的一条更新语句进行具体介绍&#xff1a; 假设这个表有一个主键ID和一个…

在视频号变现,你还停留在只能自己直播的时代吗?现在新玩法来了

大家好&#xff0c;我是电商笨笨熊 在很多人的固有印象里&#xff0c;视频号当下变现的方式还只有自己开直播带货或者是短视频带货&#xff1b;这种方式虽然变现快&#xff0c;但是对于更多的普通玩家来说相对困难&#xff0c;需要直播经验&#xff0c;自身还要具备足够的粉丝…

ML在骨科手术术前、书中、术后方法应用综述【含数据集】

达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…

CTFshow电子取证——内存取证2

接上回 JiaJia-CP-2 2.佳佳在网页上登录了自己的邮箱&#xff0c;请问佳佳的邮箱是&#xff1f; 因为是在网页上登陆的邮箱 用iehistory插件 查看一下网页历史记录 为了方便分析&#xff0c;使用grep命令正则匹配一下 **com 的记录 vol.py -f JiaJia_Co.raw --profileWin…

Git以及Gitlab的快速使用文档

优质博文&#xff1a;IT-BLOG-CN 安装git 【1】Windows为例&#xff0c;去百度下载安装包。或者去官网下载。安装过秳返里略过&#xff0c;一直下一步即可。丌要忉记设置环境发量。 【2】打开cmd&#xff0c;输入git –version正确输出版本后则git安装成功。 配置ssh Git和s…

Matlab求矩阵的逆,3种常用方法总结

几种求逆矩阵的方法总结&#xff0c;以Matlab语言为例 *0* 引言*1* 简单描述函数实现*2* 方法调用计算对比 0 引言 最近在使用函数库求解逆矩阵的时候发现同一个矩阵使用不同的语言、不同的求解方法会产生不同精度的结果&#xff0c;特别是阶数很高的方阵&#xff0c;一些库中的…

Java 中文官方教程 2022 版(四十九)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html JAXB 示例 原文&#xff1a;docs.oracle.com/javase/tutorial/jaxb/intro/examples.html 以下部分描述如何使用包含在 JAXB RI 捆绑包中的示例应用程序。JAXB RI 捆绑包可从jaxb.java.net获取。下载并安装…

力扣HOT100 - 56. 合并区间

解题思路&#xff1a; class Solution {public int[][] merge(int[][] intervals) {// 先按照区间起始位置排序Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);int[][] res new int[intervals.length][2];int idx -1;for (int[] interval : intervals) {//直接加入的…

深度学习的模型有几类,能干嘛用?

1、基础模型 &#xff08;1&#xff09;卷积神经网络 **卷积&#xff1a;**卷积的本质是通过矩阵运算9的方式将输入数据进行空间上的滤波&#xff0c;有效地提取数据中的局 部特征&#xff0c;从而实现特征数据更高程度的抽象表示。 **池化&#xff1a;**可以理解成“压缩”…

图片合成二维码怎么实现?图片二维码的生成技巧

图片合成二维码如何制作呢&#xff1f;现在很多的二维码都会提供图片预览的功能&#xff0c;我们可以用手机扫描二维码来查看图片的信息&#xff0c;比如很多的产品信息、旅游攻略、产品海报等等类型经常会制作这种类型的二维码。 其实图片制作二维码的方法很简单&#xff0c;…

MySQL:MySQL的查询(上)

文章目录 MySQL的增加单行数据插入多行数据插入插入否则更新替换 MySQL的查询select列where语句 本篇开始总结的是MySQL当中的基本查询语句 对于数据库的查询&#xff0c;无非大致就是增删查改&#xff0c;因此对于这些内容进行一一解释&#xff1a; MySQL的增加 单行数据插…

【Qt 学习笔记】Qt控件概述

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt控件概述 文章编号&#xff1a;Qt 学习笔记 / 14 文章目录 Qt控件概…