📄 testdst_rules.cpp
字号:
/******************** 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 + -