c++ boost库学习一:时间和日期

timer类

#include <boost\timer.hpp>
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    boost::timer t;
    cout<<"max time span: "<<t.elapsed_max()/3600<<"h"<<endl;  //596.523h
    cout<<"min time span: "<<t.elapsed_min()<<"s"<<endl;       //0.001s
    cout<<"now time: "<<t.elapsed()<<"s"<<endl;                //0.00s
    return 0;
}

timer对象在创建的时候就开始计时了,它最多只能计时596个小时左右,所以适合以月、年为单位计时需求。

progress_timer类

#include "iostream"
#include <boost\progress.hpp>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    boost::progress_timer t;
    //do something;

    return 0;
}

progress_timer 继承自timer类,progress_timer比较牛的点是它在析构的时候会自动向标准流(默认是std:out)输出自对象创建后流逝的时间;但是也可以把时间输出到其他库标准流(比如stringstream)

int _tmain(int argc, _TCHAR* argv[])
{
    stringstream ss;
    {
    boost::progress_timer t(ss);
    //do something;
    }
    cout<<ss.str();
    return 0;
}

progress_display类

#include "iostream"
#include <Windows.h>
#include <boost\progress.hpp>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{    

    //声明一个progress_display的对象,基数是一个整数
    boost::progress_display p(100);
    int i=0;
    while(i<100)
    {
        i++;
        Sleep(1000);
        ++p;
    }
    return 0;
}

progress_display类与timer和progress_timer没有任何关系。

它接受一个long型参数expected_count,表示用于进度显示的参数;当进度达到expected_count时表示任务已经了,进度是100%。

输出结果:

0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
***********************

date类

date类是date_time库中的一个类。下面是它的几种用法。

个人觉得其中的day_of_year() 函数还是挺实用的,我就经常要算今天是第几天

#include "iostream"
#include <boost\date_time\gregorian\gregorian.hpp>
using namespace std;
using namespace boost::gregorian;

int _tmain(int argc, _TCHAR* argv[])
{
    /*日期的初始化*/
    date d;
    date d2(2014,7,20);
    date d3 = from_string("2014-07-30");
    date d4 = from_string("2014/07/30");

    /*日期的获得*/
    cout<<d3.year()<<"-"<<d3.month()<<"-"<<d3.day()<<endl;
    cout<<day_clock::local_day()<<endl;   //local time
    cout<<day_clock::universal_day()<<endl; //UTC time

    cout<<d3.day_of_week()<<endl;//返回星期数,0表示星期天
    cout<<d3.day_of_year()<<endl;//返回该年第几天

    /*日期转换成字符串*/
    cout<<to_simple_string(d3)<<endl //2014-JUL-30
    cout<<to_iso_string(d3)<<endl;   //20140730
    cout<<to_iso_extended_string(d3)<<endl; //2014-07-30

    return 0;
}

c语言里有一个结构体tm可以用来处理日期,下面是date类的运算以及与tm相互转换的例子:

int _tmain(int argc, _TCHAR* argv[])
{
    /*日期的初始化*/
    date d(2014,7,20);
    tm t=to_tm(d);//从date转换到tm
    cout<<t.tm_year<<"-"<<t.tm_mon<<"-"<<t.tm_mday<<endl; //114-6-20 (tm 是从1900年开始的,month的0代表1月)
    date d2=date_from_tm(t);//从tm转换到date

    /*日期的运算*/
    date d3(2014,8,15);
    cout<<d3-d<<endl;
    cout<<d+days(10)<<endl;   //2014-Jul-30
    cout<<d+months(10)<<endl; //2015-May-20
    cout<<d+years(10)<<endl;  //2024-Jul-20
    cout<<d-weeks(20)<<endl;  //2014-Mar-02
    return 0;
}

c++ boost库学习一:时间和日期

时间: 2024-10-22 04:10:00

c++ boost库学习一:时间和日期的相关文章

Boost库简单运用——时间与日期的处理(一)

对于时间与日期的处理一直都是一个比较复杂的问题,而C++中对于时间与日期的处理也是比较简陋的,并不像Java.C#之流提供了非常方便易用的类.但随着Boost的推出,对于时间的处理也变得越来越简单方便了,今天我们就来学习一些较为方便的处理方式: 首先,我们先来了解Boost中对时间处理的一个比较基础的类,也是后续几个类的基类--timer. timer类可以测量时间的流逝,依据平台的不同,提供了毫秒甚至微秒级别的时间控制,我们也可以用它来做一个很简单的计时器,下面,我们通过代码来解释timer的

Boost库简单运用——时间与日期的处理(三)

今天我们就开始boost的日期处理部分,日期有太多需要细细考虑的地方,遇到日期处理问题时,自己写一个处理类,那显然是极其耗时的.学习了今天的内容之后,相信我们在日期处理时将更加得心应手.今天我们学习的是boost日期处理的核心类--date.同样,下面我们从代码入手进行学习: #include <iostream> #include <boost/date_time/gregorian/gregorian.hpp> int main() { boost::gregorian::da

Boost库简单运用——时间与日期的处理(二)

在上文中,我们了解了一种对时间进行处理的boost类,今天我们就来学习另一种时间处理的类--progress_timer,它继承于timer类,拥有timer类的功能,又在其易用性上更进一步,接下来我们以代码对该类进行说明: #include <iostream> #include <boost/progress.hpp> int main() { boost::progress_timer pt1; std::cout << pt1.elapsed_max() <

c++ boost库学习三:实用工具

noncopyable 大家都知道定义一个空类的时候,它实际包含了构造函数,拷贝构造函数,赋值操作符和析构函数等. 这样就很容易产生一个问题,就是当用户调用A a(“^_^") 或者A c="^_^" 时会发生一些意想不到的行为,所以很多时候我们需要禁用这样的用法. 一种方法就是把拷贝构造函数和赋值操作符显式的定义为private,但是这样需要很多代码. 于是boost库为大家提供了一个简单的方法:只需要将类继承于noncopyable就可以了. #include "

Boost库学习之旅入门篇

学习及使用Boost库已经有一段时间了,Boost为我的日常开发中带来了极大的方便,也使得我越来越依赖于boost库了.但boost功能太多,每次使用还是得翻看以前的 资料,所以为了以后可以更方便的使用,在此对常用的功能作一个总结,也希望以此与大家共勉. boost库下载,Svn地址: http://svn.boost.org/svn/boost/trunk 编译源码 编译boost库自带脚本解释工具: 使用vs自带命令行工具Visual Studio 命令提示(2010),运行bat脚本boo

boost库学习之regex

一.背景 项目中许多地方需要对字符串进行匹配,比如根据指定的过滤字符串来过滤文件名.刚开始是排斥使用boost库的,第一,我不熟悉boost库:第二,如果引入第三方库,就会增加库的依赖,这样的后果是,要么打包程序时,打包动态库,要么直接使用静态库编译,会使增大程序的大小. 刚开始是尝试自己写模糊匹配算法,很简单,就只支持_和%,这两个通配符,然后发现Linux下有一个fnmatch的函数,就是进行模糊匹配的,它支持shell通配符. 但是到最后发现,当需要区别很相似的字符串时,模糊匹配就不行了,

boost库学习之开篇

本系列文章使用boost_1.58.0版本. 一.欢迎使用boost C++库 boost致力于提供一个免费的.便携的源代码级的库. 我们重视那些与C++标准一起工作良好的库.boost库将要成为一个应用广泛的库,成为应用程序可以依赖的平台.boost证书估计商业和非商业机构使用它. 我们的目标是建立已存在的练习而且提供对于库具体实现的引用以至于boost库适合于最后的标准.十个boost库已经包含在C++标准委员会的TR1而且将要被包含在即将到来的C++标准版本中.更多的boost库将目标放在

boost库学习之 date_time库

 date_time库是一个全面灵活的日期时间库,提供时间相关的各种所需功能,也是一个比较复杂的库.它支持从1400-01-01到9999-12-31之间的日期计算.使用时包含#include <boost/date_time/gregorian/gregorian.hpp>头文件, 引用boost::gregorian;命名空间. 日期 date是date_time库中的核心类.以天为单位表示时间点. date d1; //无效日期 date d2(2015, 1, 4); date d

boost库学习之 timer库

timer是一个很小的库,提供简易的时间度量和进度显示,包括timer.progress_timer.progress_display三个类.不适合高精度的时间测量任务,精度依赖于操作系统或编译器,可提供的最大时间跨度只有几百个小时,不适合大跨度的时间段测量. timer类 先来看一下标准库如何计时: #include <iostream> #include <ctime> using namespace std; int main() { clock_t begin, end;