如何在C和Python之间交换时间

时间:2014-12-18 11:47:17

标签: python c time

我正在编写一些需要将当前时间嵌入其(二进制)输出文件中的C代码。稍后,该文件将被其他一些C代码(可能针对不同的体系结构编译)和/或一些python代码读取。在这两种情况下,当时都可能需要进行计算。

我想知道的是:

  1. 如何在C中获取当前UTC时间?时间()是写电话吗?
  2. 我应该以什么格式写入文件? ASN1? ISO?
  3. 如何转换为该格式?
  4. 如何在C和Python中阅读该格式并将其转换为有用的内容?

2 个答案:

答案 0 :(得分:1)

您可以使用rfc 3339 datetime format(ISO8601的个人资料)。它避免了无约束的ISO8601时间戳的许多陷阱。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
  char buf[21];
  time_t ts = time(NULL);

  struct tm *tp = gmtime(&ts);
  if (tp == NULL || tp->tm_year > 8099 || tp->tm_year < 0) {
    perror("gmtime");
    exit(EXIT_FAILURE);
  }
  if (strftime(buf, sizeof buf, "%Y-%m-%dT%H:%M:%SZ", tp) == 0) {
    fprintf(stderr, "strftime returned 0\n");
    exit(EXIT_FAILURE);
  }
  exit(puts(buf) != EOF ? EXIT_SUCCESS : EXIT_FAILURE);
}

输出

2014-12-20T11:08:44Z

用Python阅读:

>>> from datetime import datetime, timezone
>>> dt = datetime.strptime('2014-12-20T11:08:44Z', '%Y-%m-%dT%H:%M:%SZ')
>>> dt = dt.replace(tzinfo=timezone.utc)
>>> print(dt)
2014-12-20 11:08:44+00:00

答案 1 :(得分:0)

使用以下C代码获取合适的日期输出:

  time_t rawtime;
  struct tm *now;
  char timestamp[80];

  time(&rawtime);
  now = gmtime(&rawtime);
  strftime(timestamp, sizeof(timestamp), "%Y%m%d%H%M%S", now);

然后使用以下python来阅读它:

start_time = datetime.datetime.strptime(data, "%Y%m%d%H%M%S")

格式工作的变化,只要它是一致的。