我正在编写一些需要将当前时间嵌入其(二进制)输出文件中的C代码。稍后,该文件将被其他一些C代码(可能针对不同的体系结构编译)和/或一些python代码读取。在这两种情况下,当时都可能需要进行计算。
我想知道的是:
答案 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")
格式工作的变化,只要它是一致的。