<Boost> boost::lexical_cast字面转换和gregorian::date日期

来源:互联网 发布:无极矩阵灯 编辑:程序博客网 时间:2024/04/30 00:46

lexical_cast

      用于字面值的转换,转换成int,double型,类似atoi函数。

gregorian::date

      是boost里面的日期时间,使用gregorian::date_duration进行日期的加减。

闰年

      涉及到日期,就有闰年的问题,关于闰年的解释如下:

      关于公历闰年是这样规定的:地球绕太阳公转一周叫做一回归年,一回归年长365日5时48分46秒。因此,公历规定有平年和闰年,平年一年有365日,比回归年短0.2422日,四年共短0.9688日,故每四年增加一日,这一年有366日,就是闰年。但四年增加一日比四个回归年又多0.0312日,400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。由此规定:年份是整百数的必须是400的倍数才是闰年,例如1900年、2100年就不是闰年。

综上所述,我们可以得到:

     闰年即是4的倍数,同时不是100的倍数,或者是400的倍数的年份。


下面是我的代码:

#include <boost/date_time/gregorian/gregorian.hpp> #include <boost/lexical_cast.hpp> // (1)年份是4的倍数,但不是100的倍数// (2)年份是400的倍数bool is_leap_year(int year){return ( !(year%4) && ((year%100) || !(year%400)) );}int NumbericMonth(string month){string months[12] = {"Jan","Feb", "Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec"};for (int i = 0; i < 12; i++){if (_stricmp(months[i].c_str(), month.c_str()) == 0){return i+1;}}return -1;}int NumbericDay(string day){string days[7] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };cout << day << " " ;for (int i = 0; i < 7; i++){if (_stricmp(days[i].c_str(), day.c_str()) == 0){return i+1;}}return -1;}void TestDate(){//////////////////////////////////////////////////////////////////////////// lexical_cast 转换 int year = boost::lexical_cast<int>("2000");int month = boost::lexical_cast<int>("3");int day = boost::lexical_cast<int>("5");double sec = boost::lexical_cast<double>("53.234");cout << "Seconds: " << sec << endl;//////////////////////////////////////////////////////////////////////////// gregorian::date 日期boost::gregorian::date d(year, month, day); std::cout << d.year() << "/"; std::cout << NumbericMonth(boost::lexical_cast<string>(d.month())) << "/"; std::cout << d.day() << std::endl; std::cout << "End of month: " << d.end_of_month() << std::endl;  // 这个月的最后一天是几号boost::gregorian::date_duration dd(1);for (int i = 0; i < 7; i++){d += dd;std::cout << NumbericDay(boost::lexical_cast<string>(d.day_of_week())) << std::endl;// 星期几}std::cout << "After 7 days: " << d.year() << "/"; std::cout << d.month() << "/"; std::cout << d.day() << std::endl; std::cout << "leap year: " << is_leap_year(d.year()) << endl;}

程序运行结果:


0 0