1

作为标题,如何计算从 1900 年到现在使用 boost 的持续时间?

编辑:抱歉之前的问题太短了。我将再次描述我的问题。我有关于将生日作为整数保存到数据库的问题。我创建了四个函数,如下所示:

  1. ptime 到整数(按天):

     int ti=time_to_int(ptime(date(2012,1,1),0));
     => ti = 15430;//number of day from 1970 to 2012
    
  2. 整数到 ptime:

     ptime pt = int_to_time(15430);
    
  3. ptime 到字符串:

     ptime pt(date(2012,1,1), 0);
     string s = time_to_string(pt, "%d.%m.%Y");
    
  4. 字符串到 ptime:

    ptime pt = string_to_time(%d.%m.%Y);

问题:上面,我从 1970 年开始使用 epoch,一切都很好。那么如何将 01/01/1945 转换为整数呢?我认为需要使用 1900 年的纪元。但是,当将 01/01/2012 转换为 1900 年的 int 时,它返回负数,因为“我认为”以毫秒为单位的滴答计数溢出(32 位)。使用一些方法手动将日期计算为 int 是可以的,但将 int 转换回日期似乎很糟糕。我想使用 boost 来做到这一点。

有什么建议吗?谢谢!

4

1 回答 1

1

整数(int)不够大,无法容纳自1900年以来的秒数。它只能容纳大约68年。您需要使用 long(64 位)。Boost 的time_duration将使您可以访问 long 的秒数。您还可以使用@jogojapan 提到的天数。然而,白天的长度并不总是相同的(23-25 小时),所以有时在几天内跟踪事情更容易出错(如果你小心的话,应该没问题)。

查看文档中的一些示例。您可以减去两个 ptime 对象以获得 time_duration:

time_duration td = ptime1 - ptime2;
long secElapsed = td.total_seconds();
于 2012-11-14T05:04:29.700 回答