我正在编写一些将在多个互通系统上运行的代码。我使用 time() 来获取 time_t,但这会导致系统之间的时区差异出现问题,所以我想在 GMT 中获取 time_t。我一直在查看 time.h 函数,但我不清楚如何确定我会正确获得时间。到目前为止,这是我想出的:
time_t t = time();
struct tm *gtm = gmtime(&t);
time_t gt = mktime(gtm);
现在,这似乎在我的机器上得到了正确的答案,但我想知道它是否会在我推出之前普遍工作,即使其他机器的时钟设置为当地时间或格林威治标准时间或不同时区或其他什么. 我担心的原因是mktime。在描述中,它说它将 tm 结构解释为“以本地时间表示的日历时间”。在我看来,它不会返回 GMT 时间,尽管它似乎在我的机器上。另外,当我打印出 gt 时,它比 t 提前 4 小时,这似乎是正确的。但是,如果我运行以下命令:
time_t t = time();
struct tm *gtm = gmtime(&t);
struct tm *ltm = localtime(&t);
printf("%d, %d\n", gtm->tm_hour, ltm->tm_hour);
时间是一样的,都是当地时间,这不是我所期望的。
作为记录,在另一个答案中,我看到了对 timegm() 的引用,这听起来很完美,但它在我的系统上不存在。
简而言之,我如何在 C 语言的任何 Windows 机器上获得 GMT 的 time_t?
编辑:删除了添加的 msvcrt 标记,因为我没有使用 msvcrt。