您的位置:首页 > 其它

boost 程序库完全开发指南_date_time

2013-03-24 22:19 281 查看
下面是看

boost 程序库完全开发指南时,date_time(chapter2)时所敲下的代码片断....,不保证其正确性,仅作为一个记录....

#include"stdafx.h"
#include <vector>
#include <string>
#include <fstream>
#include <windows.h>
#include <boost/progress.hpp>
#include <iostream>
#include <algorithm>
using namespace std;
//using namespace std::max;
//using namespace boost;

//#pragma  comment(lib, libboost_date_time-vc80-mt-gd.lib)
//#pragma  comment(lib, libboost_date_time-vc80-mt.lib)
#define BOOST_DATE_TIME_SOUCE
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>

using namespace boost::gregorian;
using namespace boost::posix_time;
using namespace boost::local_time;

#if 1
template<typename Clock = microsec_clock>
class basic_ptimer
{
public:
basic_ptimer() {restart();}
void restart() {_start_time = Clock::local_time();}
void elapsed() const {cout << Clock::local_time() - _start_time;}
~basic_ptimer(){elapsed();}
private:
ptime _start_time;
};
//typedef basic_ptimer<microsec_clock> ptimer;
typedef basic_ptimer<> ptimer;
typedef basic_ptimer<second_clock> sptimer;
#endif

#if 0

class credit_card
{
public:
string    bank_name;
int        bill_day_no;
credit_card(const char* bname, int no):bank_name(bname), bill_day_no(no){}
int calc_free_days(date consume_day = day_clock::local_day()) const;
friend bool operator<(const credit_card& l, const credit_card& r)
{
return l.calc_free_days() < r.calc_free_days();
}
};
int credit_card::calc_free_days(date consume_day ) const
{
date bill_day(consume_day.year(), consume_day.month(), bill_day_no);
if (consume_day > bill_day) {
bill_day += months(1);
}
return (bill_day-consume_day).days() + 20;
}

#endif

#if 0
class work_time
{
public:
typedef map<time_period, string> map_t;
private:
map_t map_ts;

void init()
{
ptime p(day_clock::local_day());
map_ts[time_period(p, hours(9))] = "It's too early, just relax. \n";
p += hours(9);
map_ts[time_period(p, hours(13))] = "work so hard. \n";
p += hours(13);
}
public:
work_time()
{
init();
}

void greeting(const ptime& t)
{
map_t::iterator pos;
for(pos = map_ts.begin(); pos != map_ts.end(); ++pos)
{
if (pos->first.contains(t)) {
cout << pos->second << endl;
break;
}
}
}
};

#endif

int main()
{

tz_database tz_db;
{
ptimer pt;
tz_db.load_from_file
("f:\\boost\\libs\\date_time\\data\\date_time_zonespec.csv");
//tz_db.load_from_file("./date_time_zonespec.csv");
}
cout << endl;

time_zone_ptr shz = tz_db.time_zone_from_region("Asia/Shanghai");

time_zone_ptr nyz = tz_db.time_zone_from_region("America/New_York");

cout << shz->has_dst() << endl;
cout << shz->std_zone_name() <<endl;

local_date_time dt_bj(date(2008,1,7), hours(12), shz, false);
cout <<dt_bj << endl;

time_duration flight_time = hours(15);
dt_bj += flight_time;

cout << " after flight "  << dt_bj << endl;

local_date_time dt_ny = dt_bj.local_time_in(nyz);
cout << " convert to NYTime is " << dt_ny << endl;

#if 0
date d(2012, 1,2);
date_facet* dfacet = new date_facet("%Y年%m月%d日");
cout.imbue(locale(cout.getloc(), dfacet));
cout << d << endl;

date d2(day_clock::local_day());
cout << d2 <<endl;
#endif
#if 0
work_time wt;
wt.greeting(second_clock::local_time());
#endif

#if 0
{
ptimer pt;
Sleep(500);
}
#endif

#if 0
time_duration td(1,30,34,35);
time_duration td2 = duration_from_string("1:30:44:33");

cout << to_simple_string(td2) <<endl;
cout << to_iso_string(td2) <<endl;

#endif
#if 0

ptime p = from_time_t(std::time(0));
assert(p.date() == day_clock::local_day());
cout << p << endl;
#endif

#if 0
ptime p(date(2010,1,1), hours(12));
time_period tp1(p, hours(8));
time_period tp2(p + hours(8), hours(1));

assert(tp1.end() == tp2.begin() && tp1.is_adjacent(tp2));
assert(!tp1.intersects(tp2));

tp1.shift(hours(1));
assert(tp1.is_after(p));
assert(tp1.intersects(tp2));

tp2.expand(hours(10));
assert(tp2.contains(p) && tp2.contains(tp1));
#endif

#if 0
ptime p = second_clock::local_time();
for (time_iterator t_iter(p, minutes(10)); t_iter < p + hours(2); ++t_iter) {
cout << *t_iter << endl;
}
#endif

#if 0
ptime p1 = time_from_string("2013-3-24 20:53");
cout << p1 << endl;

ptime p2 = from_iso_string("20130303T0345591234");
cout << p2 << endl;

ptime p3 = second_clock::local_time();        //output        in seconds
cout << p3 << endl;                    // 2013-Mar-24 20:57:32

ptime p4 = microsec_clock::universal_time();                //in microseconds
cout << p4 << endl;                //2013-Mar-24 12:57:32.754747

#endif
#if 0
cout <<max(1,3) << endl;
credit_card c1("CMB", 5);
credit_card c2("GF", 18);

credit_card tmp = std::max (c1, c2);
//credit_card tmp = (c1 < c2) ? c2: c1;
cout << "you should use " << tmp.bank_name
<< ", free days  = " << tmp.calc_free_days() << endl;
#endif
#if 0
//next define no use to avoid the invalid date construct
//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR
//date d1(2011,1,1);
date d1;
assert(d1 == date(not_a_date_time));

date d2(2012,2,2);
date d3(d2);
assert(d2 == d3);

date d4(2013, Jul, 1);

assert(d2 < d4);

date d5(from_string("2012/1/8"));
date d6(from_undelimited_string("20120109"));
assert(d5 < d6);

#endif

#if 0
date d1 (neg_infin);
date d2(pos_infin);
date d3(not_special);
date d4(max_date_time);
date d5(min_date_time);

cout << "d1 "  << d1 <<endl;
cout << "d2 "  << d2 <<  endl;
cout << "d3 "  << d3 <<endl;
cout << "d4 "  << d4 << endl;
cout << "d5 "  << d5 <<endl;
#endif
#if 0
date d1 (10000, 1,2);
date d2(2012,2,30);

cout << date(2010, 1,1).week_number() << endl;

date d1(2013,3,4);
cout << to_simple_string(d1) << endl;
cout << to_iso_string(d1) << endl;
cout << to_iso_extended_string(d1) << endl;
cout << d1 <<endl;

#endif

#if 0
//days d;
date d1(from_undelimited_string("19851228"));
date d2(2013,03,24);
//cout << d2 << " - " << d1 <<  d2 - d1 << endl;
//days day= d2 - d1;
//cout << day.date_duration() << endl;
cout << d2 - d1 << endl;

date d3(1983,3,13);
cout << d2 - d3 << endl;
cout << d3 - d1 << endl;

date d (2010,3,30);
cout << to_iso_string(d) << endl;
d -= months(1);
cout << to_iso_string(d) << endl;
d -= months(1);
cout << to_iso_string(d) << endl;
d += months(2);
cout << to_iso_string(d) << endl;
#endif

#if 0
date_period dp1(date(2013,3,24), days(-100));
cout  << dp1 << endl;
#endif

#if 0
//date d(2013, 3,24);
date d  = day_clock::local_day();

date d_start(d.year(), d.month(), 1);
date d_end = d.end_of_month();
for (int i = 0; i < 7; ++i) {
cout << "\t" << i ;
}
for (int i = 0; i < d_start.day_of_week())
for(day_iterator d_iter(d_start);
d_iter != d_end; ++ d_iter)
{
cout << *d_iter << " " <<
d_iter->day_of_week() << endl;
}
#endif

//calc the credit card

#if 0
progress_display pd(10);
Sleep(500);
pd += 3;
Sleep(500);
cout <<"XXX"<<endl;
pd.restart(10);
pd += 5;
Sleep(500);
cout <<"XXX"<<endl;
pd.restart(10);
pd +=2;
Sleep(500);
pd.restart(10);
pd += 13;
#endif

#if 0
vector<string> v(100);
ofstream fs("d:\\test.txt");

progress_display pd(v.size());
vector<string>::iterator pos;

int i = 0;
for( pos = v.begin(); pos != v.end(); ++pos , ++i) {
fs << *pos << endl;

if (  i % 20 == 0 ) {
Sleep(500);
}
++pd;
}
#endif
return 0;
}

#if 0
// date_time.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"

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

#include <Windows.h>
#include <iostream>

#if 0
#include<boost/timer.hpp>
#include <boost/progress.hpp>
#include <boost/assert.hpp>
#endif

#define BOOST_TEST_MAIN 0
#include <boost/test/included/unit_test.hpp>
//#include <boost/test/minimal.hpp>
//#include <boost/format.hpp>

#define BOOST_TEST_INCLUDED
#include <boost/test/unit_test_suite.hpp>
//#include <boost/smart_ptr.hpp>

using namespace std;
using namespace boost;

int my_add(int a, int b)
{
return a + b;
}
#if 0
double func(int x)
{
BOOST_ASSERT(x != 0 && "divide by zero");
int n = 10/x;
return 0;
}

#endif
BOOST_AUTO_TEST_SUITE(test1)

BOOST_AUTO_TEST_CASE(t_test2)
{
BOOST_CHECK_EQUAL(my_add(2,3), 5);

#if 0
scoped_ptr<int> p(new int(874));
BOOST_CHECK(p);
//BOOST_CHECK_EQUAL(*p, 874);

p.reset();
BOOST_CHECK(p == 0);
#endif
}
BOOST_AUTO_TEST_SUITE_END()
#if 0
int test_main(int argc, char* argv[])
{
format fmt("%d-%d");
BOOST_CHECK(fmt.size() != 0);

fmt % 12 % 34;
BOOST_REQUIRE(fmt.str() == "12-34");
BOOST_ERROR("test is an error");

return 0;
}

#endif
#if 0
int main()
{
func(0);
timer t;
Sleep(1000);
cout << "max " << t.elapsed_max() / 3600  << "h" << endl;
cout << "min " << t.elapsed_min() / 3600  << "h" << endl;
cout << "elapse " << t.elapsed()  << "s" << endl;

{
progress_timer t;
Sleep(1056);
}

return 0;
}

#endif
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: