我目前正在研究一些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
的输出。
感谢您提供的任何帮助。
答案 0 :(得分:7)
2012 - 1970
计算到42.而1942年是在1970年1月1日之前。 mktime()
导致负时间戳,这是正常的。
来自mktime手册页:
tm_year The number of years since 1900.
将您的年度计算更改为2012 - 1900
,您应该没问题。
答案 1 :(得分:2)
请在阅读之前阅读手册页:
从man mktime()
逐字逐句
tm结构的成员是:
tm_sec分钟后的秒数,通常在0到59的范围内,但最多可以为60,以允许闰秒。
tm_min小时后的分钟数,范围为0到59.
tm_hour午夜过后的小时数,范围为0到23。
tm_mday月份的日期,范围为1到31。
tm_mon自1月以来的月数,范围为0到11。
tm_year自1900年以来的年数。
tm_wday自星期日以来的天数,范围为0到6。
tm_yday自1月1日以来的天数,范围为0到365.
tm_isdst一个标志,指示夏令时是否在所描述的时间生效。如果夏令时有效,则该值为正,如果不是,则为零;如果信息不可用,则为负。
答案 2 :(得分:2)
tm_year是自1900年以来的年数,而不是1970年。