【问题标题】:Convert nanoseconds (since midnight) to printable time using std::chrono? [closed]使用 std::chrono 将纳秒(从午夜开始)转换为可打印时间? [关闭]
【发布时间】:2018-08-10 16:34:22
【问题描述】:

您如何将uint64_t(表示自午夜以来的纳秒数)转换为人类可读的时间,例如:

HH:MM:SS.nnnnnnnnn

使用标准 C++ Chrono 库?

【问题讨论】:

  • 一般来说 - 您不能将自午夜以来的时间转换为 dd-mm-yyyy,因为它不是日期,而是持续时间,持续时间可以转换为周-天-小时...
  • 我会看看github.com/HowardHinnant/date,它正朝着成为标准的一部分前进
  • A uint64_t 从哪一天的午夜开始持有纳秒?您是说除了时间之外要打印“DD-MM-YYYY”,因此您需要指定纳秒是否是从某个标准纪元的午夜开始,或者说从哪里获取日期。跨度>
  • 伙计们,我已经编辑了我的问题以反映我的错误(道歉)。如果有人可以“取消”这个?

标签: c++ chrono


【解决方案1】:

澄清
如果您只获得自最近午夜以来的纳秒数,则不可能知道日期是什么(正如 Llya Bursov 指出的那样)。

即。如果我告诉你现在是 4:30,你将无法知道今天是 8 月 10 日。

所以我假设您正在尝试将 纪元时间(自 1970 年 1 月 1 日以来的数字或秒数)转换为人类可读的日期。

要开始使用,请查看 this 页面作为指南。

答案 1
Here 是在 C++ 中将纪元时间转换为人类可读时间的“官方”方式

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::ctime(&result);
}

这是用于获取当前纪元时间并将其转换为人类可读的日期和时间。这确实假设秒,而不是纳秒。如果您需要纳秒,只需将纳秒数除以 1E9。一秒有1E9纳秒。您将留下秒数,然后可以将其转换为人类可读的代码。

如果您还使用 [纳秒数 % 1E9 ],则结果将是纳秒数,以防万一。该数字可以添加到从上述代码返回的日期的末尾。

答案 2
如果相反,您不需要日期,只需将纳秒转换为人类可读的时间 (HH:MM:SS.nnnnnnnn) 然后看这个例子:

#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";
}

有关持续时间的帮助,请参阅 this link

让我知道这是否解决了您的问题,或者我是否回答了错误的问题。

【讨论】:

  • 嗨,抱歉- 是的,你是对的,我不知道日期!但是,我已经得到了自前一个午夜以来的纳秒数。我如何以 HH:MM:SS.nnnnnnnnn 的形式打印它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
相关资源
最近更新 更多