【问题标题】:c++ - Calculate difference in time using boost::posix_timec++ - 使用 boost::posix_time 计算时间差
【发布时间】:2014-08-23 16:07:10
【问题描述】:

我需要帮助找出两个给定时间作为字符串的区别。我正在使用 boost::posix_time 并从 boost::gregorian::date 构造 ptime 对象,但是当我尝试计算 time_duration 时得到 0。

这是程序

#include <boost/date_time/gregorian/gregorian.hpp>
#include "boost/date_time/posix_time/posix_time.hpp"

int main(int argc, char** argv) {

  std::string date_1 = "2014-08-15 10:12:10";
  std::string date_2 = "2014-08-15 16:40:02";

  boost::posix_time::ptime t1(boost::gregorian::from_simple_string(date_1));
  boost::posix_time::ptime t2(boost::gregorian::from_simple_string(date_2));

  boost::posix_time::time_duration td = t2 - t1;

  std::cout << boost::posix_time::to_simple_string(td) << std::endl;



}

这会打印出00:00:00

如何解决这个问题并获得实际的持续时间。

【问题讨论】:

  • 我对这门课没有经验,但在我看来,boost.org/doc/libs/1_35_0/doc/html/date_time/doxy.html 似乎 from_simple_string() 只接受“年-月-日”。 - 你检查过 t1 和 t2 的值吗?
  • 确实;调试器擅长这一点。
  • @MartinR 是的,正如 Dirk 所指出的,我使用了错误的构造函数..

标签: c++ boost


【解决方案1】:

正如 Martin 在他的评论中提到的,您使用了错误的(仅限日期)构造函数。

这是一个修复后的版本,以及一些测试输出:

#include <boost/date_time/gregorian/gregorian.hpp>
#include "boost/date_time/posix_time/posix_time.hpp"

int main(int argc, char** argv) {

  std::string date_1 = "2014-08-15 10:12:10";
  std::string date_2 = "2014-08-15 16:40:02";

  boost::posix_time::ptime t1(boost::posix_time::time_from_string(date_1));
  boost::posix_time::ptime t2(boost::posix_time::time_from_string(date_2));

  std::cout << "t1: " << t1 << std::endl;
  std::cout << "t2: " << t2 << std::endl;

  boost::posix_time::time_duration td = t2 - t1;

  std::cout << boost::posix_time::to_simple_string(td) << std::endl;
}

产生期望的结果:

edd@max:/tmp$ g++ -o bdt bdt.cpp -lboost_date_time
edd@max:/tmp$ ./bdt
t1: 2014-Aug-15 10:12:10
t2: 2014-Aug-15 16:40:02
06:27:52
edd@max:/tmp$ 

【讨论】:

  • 是的,现在可以了。非常感谢你的帮助。我认为 ptime 构造函数将 boost::gregorian::date 作为参数,因此尝试使用它,但它没有用。无论如何,再次感谢。
  • 我只能在几小时内得到差异...我的意思是 t1 和 t2 的差异小时数。
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 2010-11-13
  • 2021-07-20
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 2012-04-12
相关资源
最近更新 更多