C++通过boost.date_time进行时间运算
标准C函数的时间运算是非常不好用的,boost提供了一个跨平台的日期库boost.date_time,通过它可以快速实现各种时间运算。
boost.date_time中的时间对象为boost::posix_time::ptime,在<boost/date_time.hpp>中定义,它的常用操作如下。
获取现在时间:
ptime now = second_clock::local_time(); cout << now << endl;
获取日期信息:
cout << now.date().day_of_week();
通过偏移获取新时间:
ptime today = now - now.time_of_day(); ptime next_time = now + years(1) + months(1) + days(1) - hours(1);
计算时间差:
time_duration timespan = now - today;
时间比较:
bool result = next_day > now;
字符串转换为时间
标准格式的字符串可以通过time_from_string转换。
cout << time_from_string("2010-09-10 10:01:01");
但对于非标准的格式的时间,则需要自定义解析函数。这里我简单的写了一个:
ptime time_parse_exact(const string& time_str, const string& format) { ptime output; time_input_facet facet1(format, 1); std::stringstream ss1(time_str); ss1.imbue(std::locale(ss1.getloc(), &facet1)); ss1 >> output; return output; } cout << time_parse_exact("2010/09/10-10:01:01", "%Y/%m/%d-%H:%M:%S");
精准计时
对于一般的计时操作,可以通过前面的时间差运算获取。但是,有的时候需要高精度计时操作,这个时候需要用到boost的另外一个库cpu_timer。
#include <boost/timer/timer.hpp> int main(void) { boost::timer::cpu_timer timer; for (long i = 0; i < 100000000; ++i) std::sqrt(123.456L); cout << timer.format() << endl; //std::cout << timer.format(5, "%ws wall time,%ts totle time\n"); return 0; }
关于cpu_timer更多信息,请参看boost官方文档。
到此这篇关于C++通过boost.date_time进行时间运算的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C++ boost::asio编程-域名解析详细介绍
C++ boost::asio编程-域名解析 在网络通信中通常我们并不直接使用IP地址,而是使用域名.这时候我们就需要用reslover类来通过域名获取IP,它可以实现 与IP版本无关的网址解析. #include "stdafx.h" #include "boost/asio.hpp" #include "boost/shared_ptr.hpp" #include "boost/thread.hpp" #include &
-
C++用boost.signal实现多播委托
boost.signal提供了一个多播委托机制,通过它可以非常容易的实现观察者模式: void print_sum(float x, float y) { std::cout << "The sum is " << x+y << std::endl; } void print_product(float x, float y) { std::cout << "The product is " << x*y
-
C++中的boost::function库简介
boost::function Boost.Function库用来提供一个对象化的函数指针,通过它可以很容易的将一个函数封装为仿函数. boost::function库可以支持自由函数,函数对象,类成员函数.而且参数个数多达10个.boost::function库利用模板技术来实现.生成的代码有很高的运行效率.首先我们还是以一个例子简单的说明它的用法: #include <iostream> #include <boost/function.hpp> using namespace
-
C++中Boost的转换函数
Boost的转换函数是对C++中的四种类型转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)的一些补充和扩展,在阅读本文前,请先熟悉C++中的四种类型转换函数相关知识. polymorphic_cast C++提供了dynamic_cast来实现运行时的类型转换,但是如果用来转换指针时,需要记得检查返回值(这是很多程序员容易忘掉的地方),否则一旦转换失败,将获得一个NULL指针,无异于给程序埋下了一个定时炸弹. Boost的pol
-
C++中Boost.Chrono时间库的使用方法
前言 大家应该都有所体会,时钟这个东西在程序中扮演者重要的角色,在系统编程的时候睡眠.带超时的等待.带超时的条件变量.带超时的锁都会用到,但是往往对特定系统依赖性很大,感觉即使不考虑系统的跨平台性,如果能使用一个稳定的接口,同时如果能够方便的对时刻.时段等进行相关的操作和运算,将是再好不过的了. 在boost库中和时间相关的库有Boost.DateTime和Boost.Chrono,前者专注于时间时刻以及本地化相关的内容,而后者主要是时刻.时长和时间的计算等内容.当然,C++11标准已经支持st
-
C++ boost库的安装过程详解
Windows安装boost库 下载链接:https://www.boost.org/ 学习链接:https://theboostcpplibraries.com/ 1,下载解压,我的目录"C:\Program Files (x86)\Microsoft Visual Studio\2017" 2,以管理员身份运行"适用于 VS 2017 的 x64 本机工具命令提示" 3,执行以下命令进行编译: cd /d "C:\Program Files (x86)
-
C++基于Boost库实现命令行解析
第一次尝试 #include <iostream> #include <boost/program_options.hpp> // 定义命名空间 namespace opt = boost::program_options; int main(int argc, char const *argv[]) { opt::options_description desc("Usage: 32位端口快速扫描器\n\n options: \n"); desc.add_op
-
C++ boost::asio编程-同步TCP详解及实例代码
boost::asio编程-同步TCP boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型. boost.asio库支持TCP.UDP.ICMP通信协议. 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点就是执着!所有的操作都要完成或出错才会返回,不过偶的执着被大家称之为阻塞,实在是郁闷~~(场下一片嘘声),其实这样 也是有好处的,比如逻辑清晰,编程比较容易. 在服务器端,我会做个socket交给acceptor对象,让它
-
C++ Boost PropertyTree解析INI文件详解
目录 前言 什么是property_tree? 实现代码 前言 PropertyTree是一个非常牛叉的东西!虽然很小,但是,相当需要,相当重要!因为,很多的东西,我们不需要去开发,只需要去用就好了,这个东西的开发正的是极好极好的! 更重要的是,它来自大名鼎鼎的Boost库,这个库的重要性,已经是不言而喻了! property_tree是一个保存了多个属性的树形数据结构! 可以使用类似访问路径的方式问任意节点的属性,而且每个节点都可以用类似STL的风格遍历子节点. property_tree适合
-
C++通过boost.date_time进行时间运算
标准C函数的时间运算是非常不好用的,boost提供了一个跨平台的日期库boost.date_time,通过它可以快速实现各种时间运算. boost.date_time中的时间对象为boost::posix_time::ptime,在<boost/date_time.hpp>中定义,它的常用操作如下. 获取现在时间: ptime now = second_clock::local_time(); cout << now << endl; 获取日期信息: cout <
-
非常全面的php日期时间运算汇总
实例讲解之前,先来介绍几个核心函数: mktime 函数 mktime() 函数返回一个日期的 Unix 时间戳. 参数总是表示 GMT 日期,因此 is_dst 对结果没有影响. 参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值. 语法:mktime(hour,minute,second,month,day,year,is_dst) 参数 描述 hour 可选.规定小时. minute 可选.规定分钟. second 可
-
Shell时间运算及时间差计算方法
最近一段时间,在处理Shell 脚本时候,遇到时间的处理问题. 时间的加减,以及时间差的计算. 一.时间加减 这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒. 如:1990-01-01 01:01:01 加上 1小时 20分 处理方法: a.将基础时间转为时间戳 time1=$(date +%s -d '1990-01-01 01:01:01') echo $time1 631126861 [时间戳] b.将增加时间变成秒 [root@localhost ~]#
-
C++ boost 时间与日期处理详细介绍
boost 时间与日期处理 导视: 类 特点 缺点 说明 timer 计时基类 不适合大跨度时间 适用大部分的普通计时 progress_timer 继承自timer 可以自动写入流中 只精确到0.01s 如果需要更精确,可派生个类,调用stream的precision设置 progress_display 图形化显示进度 只能输出到cout 如果还有其他输出则会干扰进度显示. 折中的办法是重新显示 pd.restart(size); pd+= pNum; date 日期结构,时间点 -- da
-
利用boost获取时间并格式化的方法
利用boost来获取当前时间又方便快捷,还不用考虑跨平台的问题. 1. 输出YYYYMMDD #include <boost/date_time/gregorian/gregorian.hpp> #define BOOST_DATE_TIME_SOURCE std::string strTime = boost::gregorian::to_iso_string(\ boost::gregorian::day_clock::local_day()); std::cout <<
-
C++中Boost库裁剪与其应用详解
前言 Boost 库涵盖的范围极广,有字符串和文本处理相关子库比如 format 库和 regexp 库,有容器相关子库比如 variant 库(和 Qt 的 QVariant 有得一拼),有迭代器子库比如 tokenizer 库(可以把字符进行 tokenize),还有算法.函数对象和高阶编程相关子库如functional 库.lambda 库和 signal 库,还有泛型编程.模板编程子库如 call traits.mpl,还有并发编程相关的 thread 库,等等等等. Boost 是如此
-
一篇文章搞定Mysql日期时间函数
前言 日期和时间函数部分也是我们日常工作中使用频率比较高的一部分.这一篇我们主要讲讲Mysql里面的日期时间相关的函数,不同数据库之间基本相同,只会有个别函数的差异.大家掌握一个数据库的,其他的遇到不会的,直接查就可以了. 1.获取当前时刻时间 1.1返回当前时刻的日期和时间 1.2获取当前时刻的日期 1.3获取当前时刻的时间 1.4获取当前时刻的周数 2.日期时间格式转换 3.日期时间运算 3.1向后偏移时间 3.2向前偏移时间 3.3两日期做差 文章较长,建议先收藏,慢慢读. 1.获取当前时
-
MySQL日期与时间函数的使用汇总
本文基于MySQL8.0 本文介绍MySQL关于日期和时间操作的函数. 日期和时间函数 函数 描述 ADDDATE() 给日期值添加时间值 ADDTIME() 添加time CONVERT_TZ() 从一个时区转换为另一个时区 CURDATE() 返回当前日期 CURRENT_DATE(), CURRENT_DATE 和CURDATE()同义 CURRENT_TIME(), CURRENT_TIME 和CURDATE()同义 CURRENT_TIMESTAMP(), CURRENT_TIMEST
-
go语言中的Carbon库时间处理技巧
go语言之Carbon库 carbon是一个时间扩展库,它提供了易于使用接口. 简单示例: package main import ( "fmt" "github.com/uniplaces/carbon" "time" ) func main() { // 打印当前时间 now :=carbon.Now().DateTimeString() fmt.Println("本地时间:", now) Japantoday, _ :=
随机推荐
- asp中在JScript中使用RecordSet对象的GetRows
- MySQL优化案例系列-mysql分页优化
- SQL Server数据库管理员(DBA)的工作内容
- 关于Vue.js一些问题和思考学习笔记(1)
- 原生js实现移动开发轮播图、相册滑动特效
- C++的try块与异常处理及调试技术实例解析
- IOS 七种手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)详解及实例代码
- PHP中常用的转义函数
- Python进程间通信用法实例
- C#制作多线程处理强化版网络爬虫
- Docker Machine深入学习
- java实现单链表之逆序
- MySQL 数据库常用命令 简单超级实用版
- C++ 实现优先队列的简单实例
- javascript设计模式之单体模式学习笔记
- js 原型对象和原型链理解
- 基于jquery的设置页面文本框 只能输入数字的实现代码
- flex array 搜索 遍历
- jconsole使用介绍(图文)
- 简单解决微信文章图片防盗链问题