Boost logo

Boost :

Subject: [boost] [Date-Time] local date time "+=" Bug?
From: Michael Mathews (muckjail_at_[hidden])
Date: 2009-02-11 11:35:58


Hi Folks,
Here is the issue. If you have a local_date_time before the change in
daylight saving time to Standard time or vice versa
if you add one day to it the answer is incorrect. Here is a short example:

#include "boost/date_time/local_time/local_time.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"
#include "boost/date_time/local_time_adjustor.hpp"
using namespace boost;
using namespace local_time;
using namespace gregorian;
using namespace boost::posix_time;

int main(){
  typedef boost::date_time::local_adjustor<boost::posix_time::ptime,
-6,boost::posix_time::us_dst> local_adj;
  std::string bryan_string =
"CST-06:00:00CDT+01:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00";
  boost::local_time::time_zone_ptr tzptr(new
boost::local_time::posix_time_zone(bryan_string));
  boost::local_time::local_date_time
fallback(local_adj::local_to_utc(ptime(date(2008,11,2), minutes(0))),tzptr);
  std::cout<<fallback<<std::endl;
  fallback+=days(1);
  std::cout<<fallback<<std::endl;
  fallback-=days(1);
  std::cout<<fallback<<std::endl;
  boost::local_time::local_date_time
springahead(local_adj::local_to_utc(ptime(date(2008,3,9),
minutes(0))),tzptr);
  std::cout<<std::endl;
  std::cout<<springahead<<std::endl;
  springahead+=days(1);
  std::cout<<springahead<<std::endl;
  springahead-=days(1);
  std::cout<<springahead<<std::endl;
}

this code produces the following output with 1.37 and 1.38

2008-Nov-02 00:00:00 CDT
2008-Nov-02 23:00:00 CST
2008-Nov-02 00:00:00 CDT

2008-Mar-09 00:00:00 CST
2008-Mar-10 01:00:00 CDT
2008-Mar-09 00:00:00 CST

michael


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk