减去Boost ptime的分钟数

时间:2014-03-27 06:52:08

标签: c++ datetime boost

我试图将posix_time :: ptime实例钳制成5分钟的时间间隔。

例如:

1.  10:31:00 -> 10:30:00 
2.  11:59:00 -> 11:55:00

我的理解是,可以根据句点从ptime中减去时间。然而,下面的代码似乎增加了不减少它的时间。

#include <iostream>

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

boost::posix_time::ptime make(int h, int m, int s)
{
   return boost::posix_time::ptime
      (boost::gregorian::date(1900,1,1),
      boost::posix_time::time_duration(h,m,s,0));
}

int main()
{
   boost::posix_time::ptime t = make(22,2,0);

   int extra_mins = t.time_of_day().minutes() % 5;

   t -= boost::posix_time::minutes(extra_mins);

   if (t.time_of_day().minutes() != 0)
      std::cout << "ERROR";

   return 0;
}

我无法立即看到错误,因为它似乎正确地减少了从某个时间点开始的持续时间。

1 个答案:

答案 0 :(得分:1)

我不知道你的意思

  

我无法立即看到错误,因为它似乎正确地减少了从某个时间点开始的持续时间。

我也无法看到错误,因为行为是我所期望的。当然,我不知道你期待什么。这是:

#include <iostream>
#include "boost/date_time.hpp"
#include "boost/date_time/posix_time/posix_time_io.hpp"

using namespace boost::posix_time;

boost::posix_time::ptime make(int h, int m, int s)
{
   return boost::posix_time::ptime
      (boost::gregorian::date(1900,1,1),
      boost::posix_time::time_duration(h,m,s,0));
}

int main()
{
   boost::posix_time::ptime t = make(22,2,0);
   std::cout << "made: " << t << "\n";

   int extra_mins = t.time_of_day().minutes() % 5;
   std::cout << "extra_mins: " << extra_mins << "\n";

   t -= boost::posix_time::minutes(extra_mins);
   std::cout << "t - extra_mins: " << t << "\n";

   if (t.time_of_day().minutes() != 0)
      std::cout << "ERROR";
}

输出:

made: 1900-Jan-01 22:02:00
extra_mins: 2
t - extra_mins: 1900-Jan-01 22:00:00

对我来说这看起来很不错。请参见ti Live On Coliru