我正在尝试使用boost库检索当前时间(以毫秒为单位)。下面是我用来获取当前时间的代码,以毫秒为单位。
boost::posix_time::ptime time = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration duration( time.time_of_day() );
std::cout << duration.total_milliseconds() << std::endl;
uint64_t timestampInMilliseconds = duration.total_milliseconds() // will this work or not?
std::cout << timestampInMilliseconds << std::endl;
但这打印出10位数字,就像17227676
..我在我的ubuntu机器上运行我的代码..我相信它总是13位数的长值?不是吗?
在计算时间戳(以毫秒为单位)后,我需要使用以下公式 -
int end = (timestampInMilliseconds / (60 * 60 * 1000 * 24)) % 14
但不知怎的,我不确定我得到的timestampInMilliseconds是否正确?
首先,我应该使用boost :: posix吗?我假设可能有更好的方法..我在我的ubuntu机器上运行代码..
更新: -
因为这段bash脚本打印出13个数字的timestampInMilliseconds。
date +%s%N | cut -b1-13
答案 0 :(得分:1)
此处的问题是您使用time_of_day()
返回(来自this reference)
获取当天的时间偏移量。
因此,根据您在问题中提供的价值,我可以推断您是在凌晨4:47运行此程序。
相反,你可能想要使用例如to_tm()
获得struct tm
并从那里以毫秒为单位构建时间。
另请注意,%s
命令(和date
函数)的strftime
格式是自纪元以来秒的数量,而不是数字毫秒。
如果你看一下tm
结构,你会看到它有多少年(从1900年开始,所以在这里减去70),一年中的几天,然后是几小时,分钟和秒。天。所有这些都可以用来轻松计算时间秒。
以秒为单位是问题所在。如果你看一下,例如您看到的POSIX time
功能
将返回自Epoch
以来以秒为单位的时间值
如果您想要精确的毫秒级分辨率,则无法使用ptime
(p
代表POSIX)。如果你想要毫秒级的分辨率,你必须使用例如以更高分辨率返回时间的系统函数(如gettimeofday
),或者您可以看到this old SO answer