(详细)如何计算从1900年到现在使用提升的持续时间?

时间:2012-11-14 04:20:31

标签: c++ date datetime boost time

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

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

  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 to string:

     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);

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

    有什么建议吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

整数(int)不足以容纳自1900年以来的秒数。它只能容纳大约68年。你需要使用长(64位)。 Boost的time_duration将为您提供长达数秒的访问权限。你也可以使用@jogojapan提到的天数。然而,日长并不总是相同(23-25小时),所以有时候记录几天的事情更容易出错(如果你小心的话,它应该没问题)。

看看documentation中的一些例子。您可以减去两个ptime对象以获得time_duration:

time_duration td = ptime1 - ptime2;
long secElapsed = td.total_seconds();