分享

【Boost】date常用方法

 wtkc 2014-10-26
1. date常用方法
year(), month(), day()分别获取年月日。
year_month_day()获取年月日结构体date::ymd_type
day_of_year(): 获取date是在一年中的第几天
day_of_week(): 获取date是在一周中的第几天
week_number(): 获取本年的第几周
end_of_month(): 获取当前日期的本月最后一天
2. date与string之间的转换
date转换成string: to_iso_string()、to_iso_extended_string()、to_simple_string()
string转换成date: 参见构造方法
3. date与结构体tm之间的转换
to_tm()、date_from_tm()
4. 例子
  1. void test_date_accessor()  
  2. {  
  3.     using namespace boost::gregorian;  
  4.     date dt(2011, 2, 27);  
  5.       
  6.     greg_year y = dt.year();  
  7.     assert(y == 2011);  
  8.     greg_month m = dt.month();  
  9.     assert(m == 2);  
  10.     greg_day d = dt.day();  
  11.     assert(d == 27);  
  12.   
  13.     date::ymd_type ymd = dt.year_month_day();  
  14.     assert(ymd.year == 2011);  
  15.     assert(ymd.month == 2);  
  16.     assert(ymd.day == 27);  
  17.   
  18.     // 获取date是在一年中的第几天  
  19.     date::day_of_year_type dy = dt.day_of_year();  
  20.     assert(dy == 58);   // 一年的第58天  
  21.   
  22.     // 获取date是在一周中的第几天  
  23.     date::day_of_week_type dw = dt.day_of_week();  
  24.     assert(dw == 0);    // 星期天  
  25.       
  26.     // 获取当前日期的本月最后一天  
  27.     date dend1 = dt.end_of_month();  
  28.     assert(dend1 == date(2011, 2, 28));  
  29.     date dend2 = dend1 + months(1);  
  30.     dend2 = dend2.end_of_month();  
  31.     assert(dend2 == date(2011, 3, 31));  
  32.   
  33.     // 本年的第几周(ISO 8601 week number)  
  34.     // 注意星期天变成一周结束,不是老外习惯的一周的开始。  
  35.     int wn = dt.week_number();  
  36.     assert(wn == 8);    // 第八周  
  37.   
  38.     // 儒略日(Julian day), 是指由公元前4713年1月1日  
  39.     long l = dt.julian_day();   // 从儒略日到当天有多少天?  
  40. }  
  41.   
  42. void test_date2string()  
  43. {  
  44.     using namespace boost::gregorian;  
  45.     date dt(2011, 2, 27);  
  46.   
  47.     std::string dstr1 = to_iso_string(dt);  
  48.     std::string dstr2 = to_iso_extended_string(dt);  
  49.     std::string dstr3 = to_simple_string(dt);  
  50.       
  51.     assert(dstr1 == "20110227");  
  52.     assert(dstr2 == "2011-02-27");  
  53.     assert(dstr3 == "2011-Feb-27");  
  54. }  
  55.   
  56. void test_date2tm()  
  57. {  
  58.     using namespace boost::gregorian;  
  59.     date dt(2011, 2, 27);  
  60.   
  61.     tm t = to_tm(dt);  
  62.     assert(t.tm_year == 111);   // 从1990年计  
  63.     assert(t.tm_mon == 1);      // 结果1,从0开始,表示2月份  
  64.     assert(t.tm_mday == 27);  
  65.     assert(t.tm_wday == 0);     // 结果0,从星期日开始计  
  66.     assert(t.tm_yday == 57);    // 结果57,从0开始计,58天  
  67.     assert(t.tm_hour == 0);  
  68.     assert(t.tm_min == 0);  
  69.     assert(t.tm_sec == 0);  
  70.     assert(t.tm_isdst == -1);  
  71. }  
  72.   
  73. void test_tm2date()  
  74. {  
  75.     using namespace boost::gregorian;  
  76.     tm t;  
  77.     t.tm_year = 111;  
  78.     t.tm_mon = 1;  
  79.     t.tm_mday = 27;  
  80.     date d = date_from_tm(t);  
  81.     assert(to_iso_extended_string(d) == "2011-02-27");  
  82. }  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多