Boost日期处理

本文详细介绍了使用Boost库进行日期转换、日期差计算、当前日期与给定日期的距离计算,以及如何获取当前日期是本年的第几天,以及距离下一年给定日期的天数。涵盖了日期的基本操作和时间间隔的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/firebird321/article/details/2559103


Boost日期处理

分类: C/C++相关   1695人阅读  评论(2)  收藏  举报
日期转换为数字

  #include "boost/date_time/gregorian/gregorian.hpp"
  #include <iostream>
  #include <string>

  int
  main() 
  {

    using namespace boost::gregorian;

    try {
      // The following date is in ISO 8601 extended format (CCYY-MM-DD)
      std::string s("2001-10-9"); //2001-October-09
      date d(from_simple_string(s));
      std::cout << to_simple_string(d) << std::endl;  //2001-Oct-09      

      //Read ISO Standard(CCYYMMDD) and output ISO Extended
      std::string ud("20011009"); //2001-Oct-09
      date d1(from_undelimited_string(ud));
      //2001-10-09
      std::cout << to_iso_extended_string(d1) << std::endl;
      
      //Output the parts of the date - Tuesday October 9, 2001
      date::ymd_type ymd = d1.year_month_day();
      greg_weekday wd = d1.day_of_week();
      //Tuesday October 9, 2001
      std::cout << wd.as_long_string() << " "
                << ymd.month.as_long_string() << " "
                << ymd.day << ", " << ymd.year
                << std::endl;

      //Let's send in month 25 by accident and create an exception
      std::string bad_date("20012509"); //2001-??-09
      std::cout << "An expected exception is next: " << std::endl;
      date wont_construct(from_undelimited_string(bad_date));
      //use wont_construct so compiler doesn't complain, but you wont get here!
      //An expected exception is next:
//exception: Month number is out of range 1..12 std::cout << "oh oh, you shouldn't reach this line: " << to_iso_string(wont_construct) << std::endl; } catch(std::exception& e) { std::cout << " Exception: " << e.what() << std::endl; } return 0; } 计算给定日期与当前日期的差 #include "boost/date_time/gregorian/gregorian.hpp" #include <iostream> int main() { using namespace boost::gregorian; std::string s; std::cout << "Enter birth day YYYY-MM-DD (eg: 2002-02-01): "; std::cin >> s; try { date birthday(from_simple_string(s)); date today = day_clock::local_day(); days days_alive = today - birthday; days one_day(1); if (days_alive == one_day) { std::cout << "Born yesterday, very funny" << std::endl; } else if (days_alive < days(0)) { std::cout << "Not born yet, hmm: " << days_alive.days() << " days" <<std::endl; } else { std::cout << "Days alive: " << days_alive.days() << std::endl; } } catch(...) { std::cout << "Bad date entered: " << s << std::endl; } return 0; } 输出结果: (假设当前日期为 2008-6-23) 如果输入: 2008-6-22; 输出结果为 Born yesterday, very funny 如果输入: 2008-06-21; 输出结果为 Days alive: 2 如果输入: 2008-06-24; 输出结果为 Not born yet, hmm: -1 days 获得当前日期是本年的第几天; 计算当前日期离下一年的给定日期距离多少天 #include <iostream> #include "boost/date_time/gregorian/gregorian.hpp" int main() { using namespace boost::gregorian; date today = day_clock::local_day();
//Jan 这个宏表示 1 月
/* 1 - 12 月的宏定义如下
Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec; 这两个宏我没搞清楚是什么定义,暂时放一下
NotAMonth;NumMonths;   */ partial_date new_years_day(1,Jan); //Subtract two dates to get a duration days days_since_year_start = today - new_years_day.get_date(today.year()); std::cout << "Days since Jan 1: " << days_since_year_start.days() << std::endl; days days_until_year_start = new_years_day.get_date(today.year()+1) - today; std::cout << "Days until next Jan 1: " << days_until_year_start.days() << std::endl; return 0; }; 输出结果: (假设当前日期为 2008-6-23) Days since Jan 1: 174 (表示距离08年1月1日,相隔 174 天) Days until next Jan 1: 192 (表示距离09年1月1日,相差 192 天给定年月,获得剩下年月的天数 int main() { using namespace boost::gregorian; greg_year year(1400); greg_month month(1); // get a month and a year from the user try { int y, m; std::cout << " Enter Year(ex: 2002): "; std::cin >> y; year = greg_year(y); std::cout << " Enter Month(1..12): "; std::cin >> m; month = greg_month(m); } catch(bad_year by) { std::cout << "Invalid Year Entered: " << by.what() << '/n' << "Using minimum values for month and year." << std::endl; } catch(bad_month bm) { std::cout << "Invalid Month Entered" << bm.what() << '/n' << "Using minimum value for month. " << std::endl; } date start_of_next_year(year+1, Jan, 1); date d(year, month, 1); // add another month to d until we enter the next year. while (d < start_of_next_year){ std::cout << to_simple_string(d.end_of_month()) << std::endl; d += months(1); } return 0; } 输入: 2008(回车) 12(回车) 输出结果: 2008-Dec-31


输入: 2008(回车) 1(回车) 输出结果:
2008-Jan-31 2008-Feb-29 2008-Mar-31 2008-Apr-30 2008-May-31 2008-Jun-30 2008-Jul-31 2008-Aug-31 2008-Sep-30 2008-Oct-31 2008-Nov-30 2008-Dec-31


资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值