【问题标题】:Display POSIX as Calendar Date without gmtime and asctime将 POSIX 显示为没有 gmtime 和 asctime 的日历日期
【发布时间】:2012-12-13 20:02:41
【问题描述】:

我目前有一个包含 POSIX 时间戳的双精度,并且我成功地使用 gmtime 和 asctime 通过 time_t 结构显示日历日期:

    time_t input = posix;
    printf("%s",asctime(gmtime(&input)));

这很好用,除非(显然)当 POSIX 时间超出 time.h 库的限制(即 1901-2038)时,在这种情况下它返回 1901 年的日期。gmtime/asctime/ 是否有任何简单的替代方法time.h,还是我只需要处理原始数据?

编辑:我应该补充一点,结果很可能超出这些限制,因为 posix double 是计算的结果,而不是当前系统时间的实例化。

【问题讨论】:

  • 您希望如何将国际标准显示为日历日期?
  • 日历日期我的意思是一个表示分为年、月、日等。在上述情况下,当双posix的内容为1235736569.980815时,它正确返回Fri Feb 27 12:09:29 2009.
  • 我几乎不认为 time.h 有一个可行的替代方案来解决 2038 年的问题。您确定需要涵盖 20 年后的日期吗? :)
  • 是的,我绝对需要涵盖 2038 年之后和 1901 年之前的日期...

标签: c date time time.h


【解决方案1】:

阅读Wikipedia entry on Unix Time

POSIX 和 Open Group Unix 规范包括 C 标准库,其中包括在 <time.h> 头文件中定义的时间类型和函数。 ISO C 标准规定time_t 必须是算术类型,但没有规定任何特定类型或编码。

如果您需要以可移植的方式处理大范围的时间,您可能必须使用自己的时间库。我认为你甚至不能指望 struct tm 覆盖 1901 到 2038 年以外的范围。

您可能还想阅读此StackOverflow answer regarding time_t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多