C指针原理(42)-c++-boost(日期时间)

boost库


时间类timer

#include <boost/timer.hpp>

#include <iostream>

using namespace boost;

using namespace std;

int main(){

        timer t;

        cout<<"最大测量时间:"<<t.elapsed_max()/3600<<"h"<<endl;

        cout<<"最小测量时间:"<<t.elapsed_min()<<"s"<<endl;

        int x=0;

        for (int i=1;i<5000;i++){

                x=i;

        } 

        cout<<"程序启动后已经过去的时间"<<t.elapsed()<<"s"<<endl;

        return 0;

}

dp@dp:~/boostlearn % CC -o mytest 2.cpp -I /home/dp/boost_1_55_0

dp@dp:~/boostlearn % ./mytest

最大测量时间:9320.68h

最小测量时间:0.0078125s

程序启动后已经过去的时间0.0078125s

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


下面是timer类的内容

//  boost timer.hpp header file  ---------------------------------------------//

 

//  Copyright Beman Dawes 1994-99.  Distributed under the Boost

//  Software License, Version 1.0. (See accompanying file

//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

 

//  See http://www.boost.org/libs/timer for documentation.

 

//  Revision History

//  01 Apr 01  Modified to use new <boost/limits.hpp> header. (JMaddock)

//  12 Jan 01  Change to inline implementation to allow use without library

//             builds. See docs for more rationale. (Beman Dawes) 

//  25 Sep 99  elapsed_max() and elapsed_min() added (John Maddock)

//  16 Jul 99  Second beta

//   6 Jul 99  Initial boost version

 

#ifndef BOOST_TIMER_HPP

#define BOOST_TIMER_HPP

 

#include <boost/config.hpp>

#include <ctime>

#include <boost/limits.hpp>

 

# ifdef BOOST_NO_STDC_NAMESPACE

    namespace std { using ::clock_t; using ::clock; }

# endif

 

 

namespace boost {

 

//  timer  -------------------------------------------------------------------//

 

//  A timer object measures elapsed time.

 

//  It is recommended that implementations measure wall clock rather than CPU

//  time since the intended use is performance measurement on systems where

//  total elapsed time is more important than just process or CPU time.

 

//  Warnings: The maximum measurable elapsed time may well be only 596.5+ hours

//  due to implementation limitations.  The accuracy of timings depends on the

//  accuracy of timing information provided by the underlying platform, and

//  this varies a great deal from platform to platform.

 

class timer

{

 public:

         timer() { _start_time = std::clock(); } // postcondition: elapsed()==0

//         timer( const timer& src );      // post: elapsed()==src.elapsed()

//        ~timer(){}

//  timer& operator=( const timer& src );  // post: elapsed()==src.elapsed()

  void   restart() { _start_time = std::clock(); } // post: elapsed()==0

  double elapsed() const                  // return elapsed time in seconds

    { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }

 

  double elapsed_max() const   // return estimated maximum value for elapsed()

  // Portability warning: elapsed_max() may return too high a value on systems

  // where std::clock_t overflows or resets at surprising values.

  {

    return (double((std::numeric_limits<std::clock_t>::max)())

       - double(_start_time)) / double(CLOCKS_PER_SEC); 

  }

 

  double elapsed_min() const            // return minimum value for elapsed()

   { return double(1)/double(CLOCKS_PER_SEC); }

 

 private:

  std::clock_t _start_time;

}; // timer

 

} // namespace boost

 

#endif  // BOOST_TIMER_HPP

从上面timer类的内容可看出:

1、该类有一个私有变量保存了启动时间,在类实例化同时对其私有成员代表的启动时间赋初值:

 private:

  std::clock_t _start_time;

在timer()构造函数中,进行赋值。

_start_time = std::clock();

同时可通过 restart()函数将启动时间变量重置为当前时间

  void   restart() { _start_time = std::clock(); }

2、elapsed计算了当前时间与启动时间的差额,同时可以看到时间由标准库的clock函数获得:

double elapsed() const                  // return elapsed time in seconds

    { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }


3、gregorian

日期时间还可以使用gregorian

boost::gregorian::date类是日期程序的接口,可如下引用该库:

#include "boost/date_time/gregorian/gregorian.hpp"

date可构造日期,常用构造函数:

date(greg_year, greg_month, greg_day)

比如:date d(2002,Jan,10);

date(date d)

比如:date d1(d);

也可从字符串构造

date from_string(std::string)

比如:

std::string ds("2002/1/25");

date d(from_string(ds));

也可以使用没有分隔符的字符串:

date from_undelimited_string(std::string)

比如:

std::string ds("20020125");

date d(from_undelimited_string(ds));

date_duration可完成日期的计算,表示日期间隔

常用构造函数:

date_duration(long)

比如:date_duration dd(6); //6

 

days dd5(min_date_time);

下面是个例子

dp@dp:~/boost_1_55_0/boost % vim 3.cpp

#include <iostream>

#include "boost/date_time/gregorian/gregorian.hpp"

using namespace std;

using namespace boost::gregorian;

int main(){

        date d1(2013,06,01);

        date d2(2013,12,31);

        date_duration dd = d2-d1+date_duration(1);

        cout<<"2013年下半年共"<<dd<<""<<endl;

        return 0;

}

dp@dp:~/boost_1_55_0/boost % CC -o mytest 3.cpp -I /home/dp/boost_1_55_0

dp@dp:~/boost_1_55_0/boost % ./mytest

2013年下半年共214

dp@dp:~/boost_1_55_0/boost % 



你可能感兴趣的:(C++,boost)