【BOOST程序库】时间日期库
基本概念这里不再浪费时间介绍了,这里给出时间日期库的常见使用方法:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <boost/version.hpp>
#include <boost/config.hpp>//时间库:
#include <boost/timer.hpp> //timeer计时器
#include <boost/progress.hpp> //progress_timer计时器#include <boost/date_time/gregorian/gregorian.hpp> //日期库
#include <boost/date_time/posix_time/posix_time.hpp>int main() {/**********************************测试代码*************************************************std::cout << BOOST_VERSION << std::endl;std::cout << BOOST_LIB_VERSION << std::endl;std::cout << BOOST_PLATFORM << std::endl;std::cout << BOOST_COMPILER << std::endl;std::cout << BOOST_STDLIB << std::endl;*///**********************************timer计时器*************************************************boost::timer TimeObj; //声明计时器,声明对象的同时开始计时std::cout << TimeObj.elapsed_max() << std::endl; //计时器的最大时间长度,单位是小时std::cout << TimeObj.elapsed_min() << std::endl; //计时器的最小时间长度,单位是秒std::cout << TimeObj.elapsed() << std::endl; //计时器从声明开始,到当前的运行时间(这里可以使用单步调试的方式查看时间)TimeObj.restart();std::cout << TimeObj.elapsed() << std::endl;//**********************************progress_timer计时器*************************************************//boost::progress_timer TimeObj2;//这里其他方法和timer计时器一样,不同点:析构的时候,会自动打印出计时//**********************************日期*************************************************boost::gregorian::date DateObj1(2023, 8, 15);boost::gregorian::date DateObj2(2023, boost::gregorian::Jan, 6);boost::gregorian::date DateObj3(DateObj1);//输出方法:std::cout << DateObj1 << std::endl; //可以直接输出:2023-Aug-15printf("%d-%d-%d\n", DateObj1.year(), DateObj1.month(), DateObj1.day()); //2023-8-15char buffer[_MAX_PATH];memset(buffer, 0, _MAX_PATH);sprintf(buffer, "%d-%d-%d", DateObj1.year(), DateObj1.month(), DateObj1.day());std::cout << buffer << std::endl;//YYYY-MMM-DD 形式:2023-Aug-15std::string a = boost::gregorian::to_simple_string(DateObj1);std::cout << a << std::endl;//YYYYMMDD 形式:20230815std::string b = boost::gregorian::to_iso_string(DateObj1);std::cout << b << std::endl;//YYYY-MM-DD 形式:2023-08-15std::string c = boost::gregorian::to_iso_extended_string(DateObj1);std::cout << c << std::endl;//tm结构体:/*struct tm{int tm_sec; // seconds after the minute - [0, 60] including leap secondint tm_min; // minutes after the hour - [0, 59]int tm_hour; // hours since midnight - [0, 23]int tm_mday; // day of the month - [1, 31]int tm_mon; // months since January - [0, 11]int tm_year; // years since 1900int tm_wday; // days since Sunday - [0, 6]int tm_yday; // days since January 1 - [0, 365]int tm_isdst; // daylight savings time flag};*/tm ct = boost::gregorian::to_tm(DateObj1);std::cout << ct.tm_year << "-" << ct.tm_mon << "-" << ct.tm_mday << std::endl;//这里输出的年是从1900年开始算,经过了多长时间boost::gregorian::date d = boost::gregorian::date_from_tm(ct);std::cout << d << std::endl;std::string e = boost::gregorian::to_iso_extended_string(d);std::cout << e << std::endl; //2023-08-15//日期分开定义:boost::gregorian::days ds(11); //定义天数:11std::cout << ds << std::endl; //输出天数:11boost::gregorian::weeks ws(3); //定义周数:3std::cout << ws << std::endl; //输出周数,输出形式为以天数形式输出:21boost::gregorian::months ms(2); //定义月数:2std::cout << ms.number_of_months() << std::endl; //输出月数:2boost::gregorian::years ys(2); //定义年数std::cout << ys.number_of_years() << std::endl; //输出年数:2boost::gregorian::months mo(ms + ys); //定义月数为:2年加2月std::cout << mo.number_of_months() << std::endl; //输出月数:26//日期的基本算法(加减)boost::gregorian::date Obj(2023, 3, 25); //定义一个时间:2023-03-25Obj -= boost::gregorian::months(2); //日期减去月份(这里的月份不能直接写2,要以boost::gregorian::months(2)的形式来写std::cout << boost::gregorian::to_iso_extended_string(Obj) << std::endl; // boost::gregorian::to_iso_extended_string的形式输出日期: 2023-1-25//日期的加法boost::gregorian::date_period dp(boost::gregorian::date(2022, 1, 1), boost::gregorian::days(15)); //定义一个时间区间:2023-1-01/2023-01-15std::cout << dp << std::endl;std::cout << dp.begin() << "\t" << dp.last() << "\t" << dp.end() << std::endl; //输出:2022-Jan-01 2022-Jan-15 2022-Jan-16 迭代器的end指向之后一个的下一个dp.shift(boost::gregorian::days(5)); //将日期向后挪5天std::cout << dp.begin() << "\t" << dp.last() << "\t" << dp.end() << std::endl; //输出:2022-Jan-06 2022-Jan-20 2022-Jan-21dp.expand(boost::gregorian::days(5)); //将日期前后加5天std::cout << dp.begin() << "\t" << dp.last() << "\t" << dp.end() << std::endl; //输出:2022-Jan-01 2022-Jan-25 2022-Jan-21//时间的判断(判断的是时间区间的头)//判断是否在某个时间之前:boost::gregorian::date_period().is_before方法if (dp.is_before(boost::gregorian::date(2022, 2, 2))) {std::cout << "before 2022-02-02" << std::endl;}else {std::cout << "no before 2022-02-02" << std::endl;}//判断是否在某个时间之后:boost::gregorian::date_period().is_before方法if (dp.is_after(boost::gregorian::date(2019, 12, 5))) {std::cout << "after 2019-12-05" << std::endl;}else {std::cout << "no after 2019-12-05" << std::endl;}//判断日期区间是否包含某个日期:boost::gregorian::date_period().contains方法if (dp.contains(boost::gregorian::date(2022, 2, 6))) {std::cout << "contains 2022-01-06" << std::endl;}else {std::cout << "no contains 2022-01-06" << std::endl;}//**********************************posix_time*************************************************//posix_time//1:10:30:001 1小时,10分钟,30秒,1毫秒boost::posix_time::time_duration timeObj = boost::posix_time::duration_from_string("1:30:10:0023"); //声明时间:01:30:10.002300std::cout << timeObj << std::endl;//时间的分开声明:boost::posix_time::hours ho(2); //boost::posix_time::hours声明小时:2boost::posix_time::minutes mi(30); //boost::posix_time::minutes声明分钟:30boost::posix_time::seconds se(25); //boost::posix_time::seconds声明秒数:25boost::posix_time::millisec mill(56);//boost::posix_time::millisec声明毫秒:56//我们可以将分开的声明组合起来:boost::posix_time::ptime timeObj1(boost::gregorian::date(2022,2,15),ho + mi + se + mill);std::cout << timeObj1 << std::endl; //输出:02:30:25.056000//日期时间合并:boost::posix_time::ptime pTimeObj(boost::gregorian::date(2023, 5, 26), boost::posix_time::hours(2) + boost::posix_time::minutes(32) + boost::posix_time::seconds(25) + boost::posix_time::millisec(56));std::cout << typeid(pTimeObj.date()).name() << std::endl; boost::gregorian::date aaa = pTimeObj.date(); //pTempOnj.date()返回值类型:class boost::gregorian::datestd::cout << pTimeObj << std::endl; //输出:2023-May-26 02:32:25.056000//输出格式://1. 可以直接输出:std::cout << pTimeObj << std::endl; //2023-May-26 02:32:25.056000//2. YYYY-MMM-DD hh:mm:ss.mi形式:std::cout << boost::posix_time::to_simple_string(pTimeObj)<<std::endl; //2023-May-26 02:32:25.056000//3. YYYYMMDD hhmmss.mi形式:std::cout << boost::posix_time::to_iso_string(pTimeObj) << std::endl; //20230526T023225.056000//4. YYYY-MM-DDThh-mm-ss-mi形式:std::cout << boost::posix_time::to_iso_extended_string(pTimeObj) << std::endl; //2023-05-26T02:32:25.056000//时间是区间声明:boost::posix_time::time_period tp(pTimeObj, boost::posix_time::hours(5)); //声明时间区间:[2023-May-26 02:32:25.056000/2023-May-26 07:32:25.055999]std::cout << tp << std::endl;//将日期向后挪:tp.shift(boost::posix_time::hours(1));std::cout << tp.begin() << "\t" << tp.last() << "\t" << tp.end() << std::endl; //将日期向后挪1个小时,输出:2023-May-26 03:32:25.056000 2023-May-26 08:32:25.055999 2023-May-26 08:32:25.056000//将时间区间前后延长:tp.expand(boost::posix_time::hours(2)); std::cout << tp.begin() << "\t" << tp.last() << "\t" << tp.end() << std::endl; //将时间前后都演唱2个小时,输出:2023-May-26 01:32:25.056000 2023-May-26 10:32:25.055999 2023-May-26 10:32:25.056000//判断是否在某个时间之前:if (tp.is_before(timeObj1)) {std::cout << tp << "is before " <<" " << timeObj1 << std::endl;}else {std::cout << tp << "no before" <<" " << timeObj1 << std::endl;}//判断是否在某个时间之后:if (tp.is_after(timeObj1)) {std::cout << tp << "is after " << " " << timeObj1 << std::endl;}else {std::cout << tp << "no after" << " " << timeObj1 << std::endl;}//判断是否包含某个日期:if (tp.contains(timeObj1)) {std::cout << tp << "is contain " << " " << timeObj1 << std::endl;}else {std::cout << tp << "is contain " << " " << timeObj1 << std::endl;}return 0;
}
运行截图:
如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!
相关文章:

【BOOST程序库】时间日期库
基本概念这里不再浪费时间介绍了,这里给出时间日期库的常见使用方法: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <boost/version.hpp> #include <boost/config.hpp>//时间库࿱…...
Windows 命令提示符 (cmd. exe) 命令行字符串长度限制
在Windows中,命令提示符 (cmd. exe) 命令行字符串是有长度限制的,本文帮助你了解命令行中的字符串长度限制,以免你的批处理脚本踩坑。 (以下在Win10环境测试过) 字符串长度限制 可在命令提示符处使用的字符串的最大长…...
Kafka 入门到起飞系列
Kafka 入门到起飞系列 [Kakfa 为什么牛? 为什么这么火?有什么优势呢?](https://blog.csdn.net/FightingITPanda/article/details/131941293)[工欲善其事,必先利其器 - 核心概念(术语解释)](https://blog.cs…...

[RabbitMQ] RabbitMQ简单概述,用法和交换机模型
MQ概述: Message Queue(消息队列),实在消息的传输过程中保存消息的容器,都用于分布式系统之间进行通信 分布式系统通信的两种方式:直接远程调用 和 借助第三昂 完成间接通信 发送方称谓生产者,接收方称为消费者 MQ优…...

Oracle 多条记录根据某个字段获取相邻两条数据间的间隔天数,小于31天的记录都筛选出来
需求描述:在Oracle中 住院记录记录表为v_hospitalRecords,表中FIHDATE入院时间,FBIHID是住院号, 我想查询出每个患者在他们的所有住院记录中是否在一个月内再次入院(相邻的两条记录进行比较),并且住院记录大于一的患者…...

【数据挖掘】如何修复时序分析缺少的日期
一、说明 我撰写本文的目的是通过引导您完成一个示例来帮助您了解 TVF 以及如何使用它们,该示例解决了时间序列分析中常见的缺失日期问题。 我们将介绍: 如何生成日期以填补数据中缺失的空白如何创建 TVF 和参数的使用如何呼叫 TVF我们将考虑扩展我们的日…...
CDN、P2P、PCDN的区别是什么
本篇文章为大家介绍一下与网络加速有关的几个重要概念,一起了解一下CDN,P2P和PCDN究竟是什么吧! 1. CDN CDN即Content Delivery Network,中文全称为内容分发网络。 如果内容离用户远,用户可能无法获得及时的响应,那…...

MYSQL练习一答案
练习1答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案: 1、查询商品库存等于50的所有商品,显示商品编号,商 品名称,商品售价,商品库存。 SQL语句 select good_no,good…...
路由器(第二十五课)
路由器的深入学习 一、路由 1、路由 1) 什么是路由:路由就是数据包从一个网络到另外一外网络的过程 2)支持路由功能的设备:路由器、三层交换机、防火墙 3 路由器转发数据包的依据: -每一台路由器都维护着一张路由表 -路由器是依靠这张路由表来转发数据的 -这张路由表就…...

物联网网关模块可以带几台plc设备吗?可以接几个modbus设备?
随着物联网技术的快速发展,物联网网关模块已经成为了实现物联网应用的重要工具。很多客户在选择物联网网关模块时想了解物联网网关模块的设备接入能力,一个物联网网关模块可以带几台PLC设备?可以接几个Modbus设备? 物联网网关模块…...

SpringBoot中间件—ORM(Mybatis)框架实现
目录 定义 需求背景 方案设计 代码展示 UML图 实现细节 测试验证 总结 源码地址(已开源):https://gitee.com/sizhaohe/mini-mybatis.git 跟着源码及下述UML图来理解上手会更快,拒绝浮躁,沉下心来搞 定义&#x…...

结构化思维:高效能项目经理人的底层能力
大家好,我是老原。 我们经常会说「高效能」,那怎么成为高效能人士?其实除了拼体力和心力以外,高效能更重要的是脑力,这里的脑力不是指智力,而是结构化思维。 随着你在职场中不断成长和进阶,级…...

Pytorch个人学习记录总结 07
目录 神经网络-非线性激活 神经网络-线形层及其他层介绍 神经网络-非线性激活 官方文档地址:torch.nn — PyTorch 2.0 documentation 常用的:Sigmoid、ReLU、LeakyReLU等。 作用:为模型引入非线性特征,这样才能在训练过程中…...

vue3+ts+elementui-plus二次封装树形表格
复制粘贴即可: 一、定义table组件 <template><div classmain><div><el-table ref"multipleTableRef" :height"height" :default-expand-all"isExpend" :data"treeTableData"style"width: 100%…...
机器学习/深度学习常见算法实现(秋招版)
包括BN层、卷积层、池化层、交叉熵、随机梯度下降法、非极大抑制、k均值聚类等秋招常见的代码实现。 1. BN层 import numpy as npdef batch_norm(outputs, gamma, beta, epsilon1e-6, momentum0.9, running_mean0, running_var1)::param outputs: [B, L]:param gamma: mean:p…...

京东技术专家首推:Spring 微服务架构设计,GitHub 星标 128K
前言 本书提供了实现大型响应式微服务的实用方法和指导原则,并通过示例全面 讲解如何构建微服务。本书深入介绍了 Spring Boot、Spring Cloud、 Docker、Mesos 和 Marathon,还会教授如何用 Spring Boot 部署自治服务,而 无须使用重量级应用服…...
R语言--森林图制作
#数据准备- data5 #install.packages("rmda")rm(list=ls())library(MASS)library(rmda)library(dplyr) #mutate依赖环境library(magrittr) #%>%依赖setwd("D:/R/nomo5new2")data...
Tomcat中利用war包部署
在Tomcat中利用war包部署Web应用程序时,默认情况下,应用程序的上下文路径(也称为项目名称)将是war文件的名称(去除.war扩展名)。这意味着您在访问Web应用程序时必须在URL中包含项目名称。例如,如…...

[JAVAee]线程安全
目录 线程安全的理解 线程不安全的原因 ①非原子性 ②可见性 ③代码重排序 体会何为不安全的线程 保证线程安全 一个代码在多线程的环境下就很容易出现错误. 线程安全的理解 线程安全是什么呢?通俗的来讲,线程安全就是在多线程的环境下,代码的结果是符合我们预期的,就…...
ELK环境搭建——概况
Elastic Stack,核心产品包括 Elasticsearch、Kibana、Beats 和 Logstash等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。 目录 一:Elasticsearch: 1.1 从数据中探寻各种问题的答案 1.1.1 定义您自己的搜索方式...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...