【问题标题】:How get current timestamp in C++ since 1970?自 1970 年以来如何获取 C++ 中的当前时间戳?
【发布时间】:2016-06-27 20:58:24
【问题描述】:

有一些方法可以在 C++ 中获取当前时间戳,就像 JavaScript 的 Date.now()does 一样?

(没有chrono

我正在使用flot JQuery 库绘制图表,它的默认时间度量是 1970 年 1 月 1 日 00:00:00 UTC,所以我的 C++ 后端必须适合它。

如果是重复的问题,我很抱歉,但我发现的所有内容都使用 chrono,我无权访问。谢谢。

【问题讨论】:

    标签: c++ unix timestamp


    【解决方案1】:

    虽然不能保证所有实现都可以,但对于旧的 C time() 函数(在标头 ctimetime.h 中找到)获取自 1970 年 1 月 1 日午夜起以秒为单位的时间戳是很常见的(它是在 POSIX 上强制执行)。

    【讨论】:

    • 领先我 13 秒 :(
    • 您应该说明time() 的声明位置(<ctime><time.h>)。
    • @KeithThompson:虽然我不认为仅仅为了删除它而值得编辑,但我大多不同意。当您拥有这样的功能时,您不会遇到随机谷歌搜索,这是一回事。一旦你给了他们足够的信息来输入man time...嗯,还有争论的余地,手册页有待改进,但这不是尝试这样做的时间或地点。
    【解决方案2】:

    由于您不能使用chrono,请尝试使用time

    time_t result = time(NULL);
    printf("%s%ju secs since the Epoch\n", asctime(localtime(&result)), (uintmax_t)result);
    

    这是live example.

    请注意,这适用于大多数 POSIX 兼容系统,但并非所有系统都兼容 POSIX。

    【讨论】:

    • time 函数(您应该提到的是在 <ctime> or ` 中声明的)存在于所有符合要求的托管实现中。 POSIX 保证它返回自纪元以来的秒数,并将“纪元”定义为 1970-01-01 00:00:00 UTC。
    • 我已经尝试过了,但是 uintmax_t 没有在范围内声明。我应该更换它吗?如果是,具体是什么?
    • @LuizGuilhermeFonsecaRosa 这是一个演员表,可能没有必要,它仅用于 printf。 unix 和 posix 通常将 time_t 设为有符号整数。
    • @Ben 好吧,它起作用了。尽管它返回了与 JavaScript 不同的东西。 C++: 1467070603 JS: 1467070611310 看看它们之间的数字差异。
    • @Luiz 看起来 javascript 正在返回 ms,因为纪元不是秒。似乎您也可能在不同时间运行程序,这也说明了差异。如果此程序对您有用,请随时将其标记为正确答案。 Here1467070985s 有它,它与 c++ 返回的接近。
    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2012-07-06
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多