c++ - 使用 std::chrono 将纳秒(从午夜开始)转换为可打印时间?
问题描述
您如何将 a uint64_t
(表示自午夜以来的纳秒数)转换为人类可读的时间,例如:
HH:MM:SS.nnnnnnnnn
使用标准 C++ Chrono 库?
解决方案
澄清
如果您只获得自最近午夜以来的纳秒数,则不可能知道日期是什么(正如 Llya Bursov 指出的那样)。
IE。如果我告诉你现在是 4:30,你将无法知道今天是 8 月 10 日。
因此,我假设您正在尝试将纪元时间(自 Jan 1 1970 以来的数字或秒数)转换为人类可读的日期。
要开始使用,请查看此页面作为指南。
答案 1
这是在 C++ 中将纪元时间转换为人类可读时间的“官方”方法
#include <ctime>
#include <iostream>
int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::ctime(&result);
}
这是为了获取当前纪元时间并将其转换为人类可读的日期和时间。这确实假设秒,而不是纳秒。如果您需要纳秒,只需将纳秒数除以 1E9。一秒有1E9纳秒。您将留下秒数,然后可以将其转换为人类可读的代码。
如果您还使用 [number of nano-seconds % 1E9 ],则结果将是纳秒数,以防这很重要。该数字可以添加到从上述代码返回的日期的末尾。
回答 2
如果相反,您不需要日期,只需将纳秒转换为人类可读的时间 (HH:MM:SS.nnnnnnnnn) 然后看这个例子:
#include <iostream>
#include <chrono>
#include <ctime>
long fibonacci(unsigned n)
{
if (n < 2) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
int main()
{
auto start = std::chrono::system_clock::now();
std::cout << "f(42) = " << fibonacci(42) << '\n';
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start;
std::time_t end_time = std::chrono::system_clock::to_time_t(end);
std::cout << "finished computation at " << std::ctime(&end_time)
<< "elapsed time: " << elapsed_seconds.count() << "s\n";
}
有关持续时间的帮助,请参阅此链接。
让我知道这是否解决了您的问题,或者我是否回答了错误的问题。
推荐阅读
- python - 为什么我会收到这个 TypeError: () got an unexpected keyword argument 错误?
- phpstorm - 如何使模板片段在blade.php 文件中可见?
- aws-lambda - Step Functions 忽略参数,使用默认输入执行它
- html - 表格列标题宽度不一样,表格主体和滚动条太大
- python - 由于来自 previos click 项目的表单发布方法,网页无法正确加载 - 当前页面显示未找到数据
- python - VSCode + Pylance:已识别类属性但没有可用的自动完成功能
- excel - 为什么 On Error Goto Label 第一次成功绕过错误后不起作用?
- java - java.text.ParseException:无法解析的日期。"dd MMM yyyy HH:mm:ss" 格式
- django - 注册时用户看不到 Django 中的消息错误
- excel - 优化 excel/google 表格中的销售问题