⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdst_rules.cpp

📁 boost库提供标准的C++ API 配合dev c++使用,功能更加强大
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  /******************** post release 1 -- new dst calc engine - eu dst ********/
  

   typedef boost::date_time::eu_dst_trait<date> eu_dst_traits;
   typedef boost::date_time::dst_calc_engine<date, time_duration, eu_dst_traits>
     eu_dst_calc;
  date eu_dst_start(2002,Mar, 31);
  date eu_dst_end(2002,Oct, 27);
  ptime eu_invalid1(eu_dst_start, time_duration(2,0,0));   //invalid time label 
  ptime eu_invalid2(eu_dst_start, time_duration(2,59,59)); //invalid time label
  ptime eu_notdst1(eu_dst_start, time_duration(1,59,59));   //not ds 
  ptime eu_isdst1(eu_dst_start, time_duration(3,0,0));   //always dst
  ptime eu_isdst2(eu_dst_end, time_duration(1,59,59)); //is dst
  ptime eu_amgbig1(eu_dst_end, time_duration(2,0,0));   //ambiguous
  ptime eu_amgbig2(eu_dst_end, time_duration(2,59,59));   //ambiguous 
  ptime eu_notdst2(eu_dst_end, time_duration(3,0,0));   //always not dst

  check("eu dst start", eu_dst_calc::local_dst_start_day(2002) == eu_dst_start);
  check("eu dst end",   eu_dst_calc::local_dst_end_day(2002) == eu_dst_end);
  check("eu dst boundary",   eu_dst_calc::is_dst_boundary_day(eu_dst_start));
  check("eu dst boundary",   eu_dst_calc::is_dst_boundary_day(eu_dst_end));
  // on forward shift boundaries
  check("eu label on dst boundary invalid", 
        eu_dst_calc::local_is_dst(eu_invalid1.date(),eu_invalid1.time_of_day())==boost::date_time::invalid_time_label);
  check("eu label on dst boundary invalid",   
        eu_dst_calc::local_is_dst(eu_invalid2.date(),eu_invalid2.time_of_day())==boost::date_time::invalid_time_label);
  check("eu check if time is dst -- not",   
        eu_dst_calc::local_is_dst(eu_notdst1.date(),eu_notdst1.time_of_day())==boost::date_time::is_not_in_dst);
  check("check if time is dst -- yes",   
        eu_dst_calc::local_is_dst(eu_isdst1.date(),eu_isdst1.time_of_day())==boost::date_time::is_in_dst);
  //backward shift boundary
  check("eu check if time is dst -- yes",   
        eu_dst_calc::local_is_dst(eu_isdst2.date(),eu_isdst2.time_of_day())==boost::date_time::is_in_dst);
  check("eu check if time is dst -- ambig", 
        eu_dst_calc::local_is_dst(eu_amgbig1.date(),eu_amgbig1.time_of_day())==boost::date_time::ambiguous);
  check("eu check if time is dst -- ambig", 
        eu_dst_calc::local_is_dst(eu_amgbig2.date(),eu_amgbig2.time_of_day())==boost::date_time::ambiguous);
  check("eu check if time is dst -- not",   
        eu_dst_calc::local_is_dst(eu_notdst2.date(),eu_notdst2.time_of_day())==boost::date_time::is_not_in_dst);
  
/******************** post release 1 -- new dst calc engine - gb dst ********/

  
  /* Several places in Great Britan use eu start and end rules for the 
     day, but different local conversion times (eg: forward change at 1:00 
     am local and  backward change at 2:00 am dst instead of 2:00am 
     forward and 3:00am back for the EU).
  */
  
  typedef boost::date_time::uk_dst_trait<date> uk_dst_traits;

  typedef boost::date_time::dst_calc_engine<date, time_duration, uk_dst_traits>  uk_dst_calc;


  date uk_dst_start(2002,Mar, 31);
  date uk_dst_end(2002,Oct, 27);
  ptime uk_invalid1(uk_dst_start, time_duration(1,0,0));   //invalid time label 
  ptime uk_invalid2(uk_dst_start, time_duration(1,59,59)); //invalid time label
  ptime uk_notdst1(uk_dst_start, time_duration(0,59,59));   //not ds 
  ptime uk_isdst1(uk_dst_start, time_duration(2,0,0));   //always dst
  ptime uk_isdst2(uk_dst_end, time_duration(0,59,59)); //is dst
  ptime uk_amgbig1(uk_dst_end, time_duration(1,0,0));   //ambiguous
  ptime uk_amgbig2(uk_dst_end, time_duration(1,59,59));   //ambiguous 
  ptime uk_notdst2(uk_dst_end, time_duration(3,0,0));   //always not dst

  check("uk dst start", uk_dst_calc::local_dst_start_day(2002) == uk_dst_start);
  check("uk dst end",   uk_dst_calc::local_dst_end_day(2002) == uk_dst_end);
  check("uk dst boundary",   uk_dst_calc::is_dst_boundary_day(uk_dst_start));
  check("uk dst boundary",   uk_dst_calc::is_dst_boundary_day(uk_dst_end));
  // on forward shift boundaries
  check("uk label on dst boundary invalid", 
        uk_dst_calc::local_is_dst(uk_invalid1.date(),uk_invalid1.time_of_day())==boost::date_time::invalid_time_label);
  check("uk label on dst boundary invalid",   
        uk_dst_calc::local_is_dst(uk_invalid2.date(),uk_invalid2.time_of_day())==boost::date_time::invalid_time_label);
  check("uk check if time is dst -- not",   
        uk_dst_calc::local_is_dst(uk_notdst1.date(),uk_notdst1.time_of_day())==boost::date_time::is_not_in_dst);
  check("uk check if time is dst -- yes",   
        uk_dst_calc::local_is_dst(uk_isdst1.date(),uk_isdst1.time_of_day())==boost::date_time::is_in_dst);
  //backward shift boundary
  check("uk check if time is dst -- yes",   
        uk_dst_calc::local_is_dst(uk_isdst2.date(),uk_isdst2.time_of_day())==boost::date_time::is_in_dst);
  check("uk check if time is dst -- ambig", 
        uk_dst_calc::local_is_dst(uk_amgbig1.date(),uk_amgbig1.time_of_day())==boost::date_time::ambiguous);
  check("uk check if time is dst -- ambig", 
        uk_dst_calc::local_is_dst(uk_amgbig2.date(),uk_amgbig2.time_of_day())==boost::date_time::ambiguous);
  check("uk check if time is dst -- not",   
        uk_dst_calc::local_is_dst(uk_notdst2.date(),uk_notdst2.time_of_day())==boost::date_time::is_not_in_dst);


//   /******************** post release 1 -- new dst calc engine ********/

//   //Define dst rule for Paraguay which is transitions forward on Oct 1 and back Mar 1
  
  typedef boost::date_time::dst_calc_engine<date, time_duration, 
                                            paraguay_dst_traits>  pg_dst_calc;

  {

    date pg_dst_start(2002,Oct, 1);
    date pg_dst_end(2002,Mar, 1);
    date pg_indst(2002,Dec, 1);
    date pg_notdst(2002,Jul, 1);
    ptime pg_invalid1(pg_dst_start, time_duration(2,0,0));   //invalid time label 
    ptime pg_invalid2(pg_dst_start, time_duration(2,59,59)); //invalid time label
    ptime pg_notdst1(pg_dst_start, time_duration(1,59,59));   //not ds 
    ptime pg_isdst1(pg_dst_start, time_duration(3,0,0));   //always dst
    ptime pg_isdst2(pg_dst_end, time_duration(0,59,59)); //is dst
    ptime pg_amgbig1(pg_dst_end, time_duration(1,0,0));   //ambiguous
    ptime pg_amgbig2(pg_dst_end, time_duration(1,59,59));   //ambiguous 
    ptime pg_notdst2(pg_dst_end, time_duration(2,0,0));   //always not dst
    
    check("pg dst start", pg_dst_calc::local_dst_start_day(2002) == pg_dst_start);
    check("pg dst end",   pg_dst_calc::local_dst_end_day(2002) == pg_dst_end);
    check("pg dst boundary",   pg_dst_calc::is_dst_boundary_day(pg_dst_start));
    check("pg dst boundary",   pg_dst_calc::is_dst_boundary_day(pg_dst_end));
    // on forward shift boundaries
    check("pg label on dst boundary invalid", 
          pg_dst_calc::local_is_dst(pg_invalid1.date(),pg_invalid1.time_of_day())==boost::date_time::invalid_time_label);
    check("pg label on dst boundary invalid",   
          pg_dst_calc::local_is_dst(pg_invalid2.date(),pg_invalid2.time_of_day())==boost::date_time::invalid_time_label);
    check("pg check if time is dst -- not",   
          pg_dst_calc::local_is_dst(pg_notdst1.date(),pg_notdst1.time_of_day())==boost::date_time::is_not_in_dst);
    check("check if time is dst -- yes",   
          pg_dst_calc::local_is_dst(pg_isdst1.date(),pg_isdst1.time_of_day())==boost::date_time::is_in_dst);
    //backward shift boundary
    check("pg check if time is dst -- yes",   
          pg_dst_calc::local_is_dst(pg_isdst2.date(),pg_isdst2.time_of_day())==boost::date_time::is_in_dst);
    check("pg check if time is dst -- ambig", 
          pg_dst_calc::local_is_dst(pg_amgbig1.date(),pg_amgbig1.time_of_day())==boost::date_time::ambiguous);
    check("pg check if time is dst -- ambig", 
          pg_dst_calc::local_is_dst(pg_amgbig2.date(),pg_amgbig2.time_of_day())==boost::date_time::ambiguous);
    check("pg check if time is dst -- not",   
          pg_dst_calc::local_is_dst(pg_notdst2.date(),pg_notdst2.time_of_day())==boost::date_time::is_not_in_dst);
    // a couple not on the boudnary
    check("pg check if time is dst -- yes",   
          pg_dst_calc::local_is_dst(pg_indst,time_duration(0,0,0))==boost::date_time::is_in_dst);
    check("pg check if time is dst -- not",   
          pg_dst_calc::local_is_dst(pg_notdst,time_duration(0,0,0))==boost::date_time::is_not_in_dst);
    
  }

//   /******************** post release 1 -- new dst calc engine ********/

//   //Define dst rule for Adelaide australia
  
  typedef boost::date_time::acst_dst_trait<date> acst_dst_traits;
  typedef boost::date_time::dst_calc_engine<date, time_duration, 
                                            acst_dst_traits>  acst_dst_calc;

  {

    date acst_dst_start(2002,Oct, 27);
    date acst_dst_end(2002,Mar, 31);
    date acst_indst(2002,Dec, 1);
    date acst_notdst(2002,Jul, 1);
    ptime acst_invalid1(acst_dst_start, time_duration(2,0,0));   //invalid time label 
    ptime acst_invalid2(acst_dst_start, time_duration(2,59,59)); //invalid time label
    ptime acst_notdst1(acst_dst_start, time_duration(1,59,59));   //not ds 
    ptime acst_isdst1(acst_dst_start, time_duration(3,0,0));   //always dst
    ptime acst_isdst2(acst_dst_end, time_duration(0,59,59)); //is dst
    ptime acst_amgbig1(acst_dst_end, time_duration(1,0,0));   //ambiguous
    ptime acst_amgbig2(acst_dst_end, time_duration(1,59,59));   //ambiguous 
    ptime acst_notdst2(acst_dst_end, time_duration(2,0,0));   //always not dst
    
//     std::cout << "acst dst_start: " << acst_dst_calc::local_dst_start_day(2002)
//               << std::endl;
    check("acst dst start", acst_dst_calc::local_dst_start_day(2002) == acst_dst_start);
    check("acst dst end",   acst_dst_calc::local_dst_end_day(2002) == acst_dst_end);
    check("acst dst boundary",   acst_dst_calc::is_dst_boundary_day(acst_dst_start));
    check("acst dst boundary",   acst_dst_calc::is_dst_boundary_day(acst_dst_end));
    // on forward shift boundaries
    check("acst label on dst boundary invalid", 
          acst_dst_calc::local_is_dst(acst_invalid1.date(),acst_invalid1.time_of_day())==boost::date_time::invalid_time_label);
    check("acst label on dst boundary invalid",   
          acst_dst_calc::local_is_dst(acst_invalid2.date(),acst_invalid2.time_of_day())==boost::date_time::invalid_time_label);
    check("acst check if time is dst -- not",   
          acst_dst_calc::local_is_dst(acst_notdst1.date(),acst_notdst1.time_of_day())==boost::date_time::is_not_in_dst);
    check("check if time is dst -- yes",   
          acst_dst_calc::local_is_dst(acst_isdst1.date(),acst_isdst1.time_of_day())==boost::date_time::is_in_dst);
    //backward shift boundary
    check("acst check if time is dst -- yes",   
          acst_dst_calc::local_is_dst(acst_isdst2.date(),acst_isdst2.time_of_day())==boost::date_time::is_in_dst);
    check("acst check if time is dst -- ambig", 
          acst_dst_calc::local_is_dst(acst_amgbig1.date(),acst_amgbig1.time_of_day())==boost::date_time::ambiguous);
    check("acst check if time is dst -- ambig", 
          acst_dst_calc::local_is_dst(acst_amgbig2.date(),acst_amgbig2.time_of_day())==boost::date_time::ambiguous);
    check("acst check if time is dst -- not",   
          acst_dst_calc::local_is_dst(acst_notdst2.date(),acst_notdst2.time_of_day())==boost::date_time::is_not_in_dst);
    // a couple not on the boudnary
    check("acst check if time is dst -- yes",   
          acst_dst_calc::local_is_dst(acst_indst,time_duration(0,0,0))==boost::date_time::is_in_dst);
    check("acst check if time is dst -- not",   
          acst_dst_calc::local_is_dst(acst_notdst,time_duration(0,0,0))==boost::date_time::is_not_in_dst);
    //    ptime utc_t = ptime(acst_dst_start, hours(2)) - time_duration(16,30,0);
    //    std::cout << "UTC date/time of Adelaide switch over: " << utc_t << std::endl;
    
  }

  return printTestStats();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -