<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
- <Boost> boost::lexical_cast字面转换和gregorian::date日期
- boost lexical_cast 字符串数字间的字面转换(学习笔记)
- BOOST转换lexical_cast
- Boost的转换函数numeric_cast和lexical_cast
- boost----boost::gregorian
- Boost::lexical_cast
- Boost :Lexical_cast
- boost::lexical_cast
- boost lexical_cast
- boost::lexical_cast
- boost lexical_cast
- boost::lexical_cast
- BOOST-lexical_cast
- 实现 boost lexical_cast(基本类型转换)
- 用boost::lexical_cast进行数值转换
- 用boost::lexical_cast进行数值转换
- BOOST 类型转换(lexical_cast)崩溃问题
- BOOST库 之 lexical_cast类型转换
- Linux ---lseek() 函数
- CLI与STI
- 1501051537-hpu-1012 【C语言训练】水仙花数问题2.cpp
- 三步轻松设置允许WIN2008多个远程桌面同时连接
- 【屌丝程序的口才逆袭演讲稿50篇】第三篇:我的舍与得的2014[张振华.Jack]
- <Boost> boost::lexical_cast字面转换和gregorian::date日期
- Android Fragment完全解析
- poj1502 MPI Maelstrom(最短路中的最大值)
- sql server browser禁用了怎么启动
- AndroidFM模块学习之四源码分析(九)
- HTML笔记-HTML基础
- java nio(十)
- iOS之UIToolBar的使用
- poj 1273 Drainage Ditches