将人类时间转换为纪元 Unix 时间返回负数

标签 c mktime time-t

我目前正在编写一些 C 代码,我正在尝试将人类可读的日期转换为纪元时间戳(unix 时间戳)。但是,它总是返回一个负数。我正在使用 struct tm 并对日期值进行硬编码,直到我让它正常工作。下面是代码

struct tm t;
time_t t_of_day;
t.tm_year = 2012 - 1970;
t.tm_mon = 9;
t.tm_mday = 24;
t.tm_hour = 11;
t.tm_min = 34;
t.tm_sec = 30;
t.tm_isdst = 1;
t_of_day = mktime(&t);
printf("Epoch time stamp is: %ld\n", t_of_day);

执行此代码时,我得到 -858000330 的输出。

感谢您提供的任何帮助。

最佳答案

2012 - 1970 计算为 42。1942 年早于 1/1/1970。不过,mktime() 导致负时间戳是正常的。

来自 mktime 手册页:

tm_year   The number of years since 1900.

将您的年份计算更改为 2012 - 1900,您应该没问题。

关于将人类时间转换为纪元 Unix 时间返回负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047516/

相关文章:

python - 在另一台计算机上运行时,运行绑定(bind) SWIG 的 Python+C 程序会出现缺少 DLL 错误

c - 在 RVCT 编译环境中,如何包装一个函数

c - 读取文本文件的 C 程序中的段错误

C 程序 time_t 和 struct tm,结果相同?

php - 如何以毫秒为单位制作 `mktime` 格式?

C 编程 通过<time.h>的time(&start)函数改变程序结果

将毫秒转换为 time_t

c - inet_ntop 始终返回相同的 IP

c++ - 在 C/C++ 中解析 100,000 个 YYYYMMDD.HHMMSS 字符串时 mktime 缓慢

c++ - 将时间戳打包成 4 个字节