zoukankan      html  css  js  c++  java
  • boost 程序库完全开发指南_date_time

    下面是看

    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
  • 相关阅读:
    hadoop机架感知
    Ajax请求结果的缓存
    Blocks语法
    CentOS yum 源的配置与使用
    .NET三层架构开发初步
    Mac技巧合集第一期
    Fine Uploader文件上传组件
    WCF 系列文章
    http权威指南读书笔记
    WCF Service Hosting的线程关联性Mono实现比.NET统一?
  • 原文地址:https://www.cnblogs.com/vimmer/p/2979797.html
Copyright © 2011-2022 走看看