代码之家  ›  专栏  ›  技术社区  ›  MK.

处理64/32位时间的便携式方法

  •  16
  • MK.  · 技术社区  · 16 年前

    我想到将TT\u FMT声明为“%d”或“%lld”,然后将printfs更改为 printf(“时间:%d,寄存器:blah”)将被printf(“时间:“TT\u FMT”,寄存器:blah”) 有更好的办法吗?我怎么才能找到他们?

    3 回复  |  直到 16 年前
        1
  •  11
  •   Alok Singhal    16 年前

    根据C标准, time_t 是一种算术类型,“能够表示时间”。所以,可能是 double 例如(Posix公司 mentions this more explicitly time()

    也许最干净的解决方案是将值转换为所需的任何类型。你可能想要一个 unsigned long long unsigned long :

    printf("%llu\n", (unsigned long long)t);
    
        2
  •  7
  •   porges    16 年前

    strftime time_t 一根绳子。

    是一个 int ,你可以投 intmax_t (来自 stdint.h )并使用 PRIdMAX (来自 inttypes.h ).

        3
  •  3
  •   R Samuel Klatchko    16 年前

    #ifdef 64_BIT_TIME
      #define TT_MOD "ll"
    #else
      #define TT_MOD ""
    #endif
    

    然后像这样使用它:

    printf("current time in seconds is: %" TT_MOD "u", time(0));
    

    原因是,虽然您主要想要十进制中的第二个,但有时您可能想要十六进制(或者您可能想要前导的0)。只要有修饰符,你就可以很容易地写:

    "%" TT_MOD "x"   // in hex
    "%08" TT_MOD "d"  // left pad with 0's so the number is at least 8 digits
    
        4
  •  1
  •   BlackLight    6 年前

    我最喜欢的处理方法是:

    1. 重新定义 time_t 时间\ 到处都是,而不是 unsigned long long 等。:
    #define  time_t  intmax_t  /* Or unsigned long long int, int64_t etc. */
    
    1. 使用 strftime

    然而,当大多数Unix系统和编译器必须向64位聚合时,时间就要到来了 时间\ . 至少,我希望这个时间在2038年之前到来。

        5
  •  -1
  •   ericcurtin    6 年前

    printf("%lld\n", t);
    

    更干净。

    推荐文章