Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (详细)如何计算从1900年到现在使用boost的持续时间?_C++_Date_Datetime_Boost_Time - Fatal编程技术网

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

C++ (详细)如何计算从1900年到现在使用boost的持续时间?,c++,date,datetime,boost,time,C++,Date,Datetime,Boost,Time,作为标题,如何计算从纪元1900到现在使用boost的持续时间 编辑:很抱歉上一次的问题太短。我将再次描述我的问题。 我无法将生日作为整数保存到数据库中。我创建了四个函数,如下所示: ptime to integer(按天): 整数到ptime: ptime pt = int_to_time(15430); ptime到字符串: ptime pt(date(2012,1,1), 0); string s = time_to_string(pt, "%d.%m.%Y"); 连接到p

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

编辑:很抱歉上一次的问题太短。我将再次描述我的问题。 我无法将生日作为整数保存到数据库中。我创建了四个函数,如下所示:

  • ptime to integer(按天):

  • 整数到ptime:

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

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

     ptime pt = int_to_time(15430);
    
    ptime pt=字符串到时间(%d.%m.%Y)

  • 问题: 在上面,我从1970年开始使用epoch,所有的工作都很好。那么如何将1945年1月1日转换为整数呢?我认为需要使用1900年这样的年代。 然而,当将2012年1月1日从1900转换为整数时,它返回负数,因为“我认为”刻度计数以毫秒为单位溢出(32位)。 使用一些方法手动计算日期到整数是可以的,但将整数转换回日期似乎不好。我想用boost来做这个

    有什么建议吗? 谢谢

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

    请看下面的示例。可以减去两个ptime对象以获得时间持续时间:

    time_duration td = ptime1 - ptime2;
    long secElapsed = td.total_seconds();
    
    整数(int)不够大,无法容纳1900年以来的秒数。它只能保存大约68年。您需要使用长字符(64位)。Boost’s将使您能够访问最长的秒数。您还可以使用@jogojapan提到的天数。然而,一天的长度并不总是相同的(23-25小时),所以有时候在一天中跟踪事情更容易出错(如果你小心的话,应该可以)

    请看下面的示例。可以减去两个ptime对象以获得时间持续时间:

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

    如果只与出生日期相关,而与出生时间无关,您可以使用1900年以来的天数,而不是秒数吗?这样当然可以避免溢出问题。如果只与出生日期相关,而与出生时间无关,您是否可以使用1900年以来的天数,而不是秒数?这样肯定可以避免溢出问题。能否更详细地说明“Boost的[time_duration][1]可以让您访问最长的秒数”?您应该查看文档,但我添加了一个非常基本的示例。我也使用了与您的示例相同的示例。再次检查,我发现我的错误是在函数printf中使用int而不是unsigned,“%d”而不是“%u”(“%d”,time\u int)。还有一个错误很重要,我将total_seconds()直接除以60来计算分钟:long minutes=td.total_seconds()/60。感谢您更详细地了解“Boost的[time_duration][1]可以让您访问最长的秒数”?您应该查看文档,但我添加了一个非常基本的示例。我也使用了与您的示例相同的示例。再次检查,我发现我的错误是在函数printf中使用int而不是unsigned,“%d”而不是“%u”(“%d”,time\u int)。还有一个错误很重要,我将total_seconds()直接除以60来计算分钟:long minutes=td.total_seconds()/60。谢谢