【问题标题】:Converting seconds after epoch into unix time将纪元后的秒数转换为unix时间
【发布时间】:2023-04-09 20:36:01
【问题描述】:

在纪元之后我有几秒钟(比如 x,x 是 long long 数据类型)。我希望使用 <ctime> 库将其转换为 unix 时间。问题是,我想让 gmtime() 的 time_t 变量起作用,我无法将我的 x (long long) 转换为 time_t。

这是在做什么:

//x is number of seconds after epoch, I want that in unix time 
time_t t=x; 
printf("%s\n",asctime(gmtime(&t)));

我可以以某种方式将x 转换为time_t 吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

    就投吧?

    time_t t = (time_t) x;
    

    它会削减前 32 位,但在您真正需要 64 位时间戳之前,您还有超过 25 年的时间。 :)

    当然,如果您的纪元与 POSIX 纪元 (1970-01-01 00:00:00) 不同,则可能会出现问题。

    【讨论】:

    • time_t 是 用于存储自纪元以来的秒数的类型。有问题的库是否将其作为 32 位或 64 位值处理取决于库。即,这是一个(?)完全有效的答案。 +1。
    • @Shahbaz 我知道,我在那里! :) 谢天谢地,我在 90 年代进入工作生活的时间已经够晚了,以至于我们的团队已经考虑到了这一点。这也是为什么我只使用内置时间类型和函数之外的任何东西的原因,然后当更改为使 time_t 64 位时,我的代码只需要重新编译即可工作。
    • @BoBTFish 如果您阅读了<sys/types.h> 的官方 POSIX 参考资料,那么它特别指出 time_t 是“用于以秒为单位的时间。”
    • 我实际上有点困惑。我认为c标准可能无法保证,但posix标准可能吗? pubs.opengroup.org/onlinepubs/7908799/xsh/systypes.h.html 说 time_t Used for time in seconds. 编辑 - 是的,慢了一分钟。
    • @BoBTFish 阅读C11 draft,第 7.27.1 节第 4 段,它指出“clock_t 和 time_t 中可表示的时间范围和精度是实现定义的。”。所以你是正确的C标准。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2015-07-08
    • 2013-03-02
    相关资源
    最近更新 更多