gpt4 book ai didi

c++ - 可以 boost 公历日期和 boost posix 时间正确计算 unixtime 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:53 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的时间戳系统,它提供当前时间的纪元秒和小数秒。我正在使用 boost 库并且有这样的东西:

const boost::posix_time::ptime epoch(boost::gregorian::date(1970, 1, 1));
boost::posix_time::ptime time() {
boost::posix_time::ptime now = boost::posix_time::microsec_clock::universal_time();
return now;
}
boost::posix_time::time_duration dur = (time() - epoch);

然后使用以下元素提取纪元值:

dur.total_seconds();
dur.fractional_seconds();

具体来说,这会返回正确的 unix 时间吗?如果没有,关于如何纠正它的任何建议?谢谢。

最佳答案

是的,这应该行得通,但是可以肯定的是,总是有实验证据:

#include <iostream>
#include <time.h>
#include <boost/date_time.hpp>
namespace bpt = boost::posix_time;
namespace bg = boost::gregorian;
int main()
{
bpt::time_duration dur = bpt::microsec_clock::universal_time()
- bpt::ptime(bg::date(1970, 1, 1));
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
std::cout << std::setfill('0')
<< " boost: " << dur.total_seconds() << '.' << std::setw(6)
<< dur.fractional_seconds() << '\n'
<< " ctime: " << time(NULL) << '\n'
<< " posix: " << ts.tv_sec << '.' << std::setw(9)
<< ts.tv_nsec << '\n';
}

我明白了

Linux/海湾合作委员会

 boost: 1361502964.664746
ctime: 1361502964
posix: 1361502964.664818326

太阳/太阳工作室

 boost: 1361503762.775609
ctime: 1361503762
posix: 1361503762.775661600

AIX/XLC

 boost: 1361503891.342930
ctime: 1361503891
posix: 1361503891.342946000

甚至 Windows/Visual Studio

 boost: 1361504377.084231
ctime: 1361504377

看起来他们都同意自 date(1970,1,1) 以来经过了多少秒

关于c++ - 可以 boost 公历日期和 boost posix 时间正确计算 unixtime 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15013932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com