当前位置: 首页 > 知识库问答 >
问题:

如何用微秒创建时间戳

东方和惬
2023-03-14

我正在尝试生成一个分辨率为微秒的时间戳。我试着用这个答案提取年/月/日等,来自C++中的std::chrono::time_point,还有这个:C++11实际系统时间(毫秒),但我不确定这样做是否正确:

template <typename Duration>
void print_time(tm t, Duration fraction) {
using namespace std::chrono;
std::printf("[%04u-%02u-%02u %02u:%02u:%02u.%03u.%03u]\n", t.tm_year + 1900,
        t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
        static_cast<unsigned>(fraction / milliseconds(1)),
        static_cast<unsigned>(fraction / microseconds(1)));
}

int main() {
using namespace std;
using namespace std::chrono;
system_clock::time_point now = system_clock::now();
system_clock::duration tp = now.time_since_epoch();
tp -= duration_cast<seconds>(tp);
time_t tt = system_clock::to_time_t(now);
cout << tp.count() <<endl;
print_time(*gmtime(&tt), tp);
print_time(*localtime(&tt), tp);

该代码的输出为:

324760155[2019-09-15 10:09:13.324.324760][2019-09-15 10:09:13.324.324760]

共有1个答案

年健
2023-03-14
template <typename Rep, typename Period>
void
print_time(tm t, std::chrono::duration<Rep, Period> fraction)
{
    using namespace std::chrono;
    auto ms = duration_cast<milliseconds>(fraction);
    fraction -= ms;
    auto us = duration_cast<microseconds>(fraction);
    std::printf("[%04u-%02u-%02u %02u:%02u:%02u.%03u.%03u]\n", t.tm_year + 1900,
        t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
        static_cast<unsigned>(ms / milliseconds(1)),
        static_cast<unsigned>(us / microseconds(1)));
}

>

  • 我对参数所做的更改使它不会过于泛型,不会接受不是chrono::duration的内容。

    若要从fraction中获得毫秒的数量(并假设fraction为非负),只需duration_cast (fraction) 即可。

    现在您需要将前一步获得的毫秒分数中减去,以免它们在下一步中回来缠着您。

    要获得fraction中的微秒的数量(假设fraction为非负),只需duration_cast (fraction) 即可。

    如果您想进一步得到分数中的纳秒,则需要在继续操作之前先减去微秒部分。

  •  类似资料:
    • 我正试图为我的项目标准化时间戳格式,其中源以微秒精度报告。我试图找出是否有一种干净的或者最小化的方法,不需要使用手写的常量。

    • 我从GPS接收机接收到一个时间戳,它以秒后的微秒时间表示:

    • 我试图在包含微秒级时间戳的cassandra中存储数据。cassandra的文档称“时间戳”数据类型可以存储纪元以来的毫秒,但互联网上的几条消息似乎暗示cassandra可以本地存储微秒时间戳。 在卡桑德拉中存储微秒级时间的最佳方法是什么?我是不是应该省略日期部分,存储很长一段呢? 正在中止记录#1的导入。以前插入的记录仍然存在,之后的一些记录也可能存在。 我的cassandra版本:[cqlsh

    • 问题内容: 查找音云轨道的持续时间。 我希望创建一个秒表功能,当您单击ID 时,该功能将开始计时毫秒,以便当该功能被“单击”一定时间后,if函数将执行某些操作。就我而言,替换图像。并且该函数将在再次单击时将其自身重置。 就像= - 我该如何设置 = ?这是毫秒吗? 问题答案: 您会看到演示代码只是一个开始/停止/重置毫秒计数器。如果您想按时进行奇特的格式化,那完全取决于您。这应该足以让您入门。 这

    • 问题内容: 我可以通过java.util.Date(milliseconds)在Java中创建类似的Date对象。如何在Python中创建可比对象? 分配一个Date对象,并将其初始化为表示自标准基准时间(即“纪元”)(即GMT 1970年1月1日)以来指定的毫秒数。 问题答案: 只需将其转换为时间戳

    • 我有存储有纪元时间戳值的时间列。我正尝试将其转换为可读格式,如下所示: YYYYMMDD HH:MM:SS.uuuuuu 其中last.uuuuuu是微秒的时间戳。我可以使用以下命令显示YYYYMMDD hh:mm:ss: 选择FROM_UNIXTIME(1618096657,“%y%m%d%h:%i:%s”)作为结果; 但当我尝试使用%f标志添加微秒时,它就不起作用了。 选择FROM_UNIXT