在一个简单的测试中,从Unix纪元(01/01/1970 00:00:00 UTC)到2019年2月22日为止的经过时间以秒为单位,它返回了大量 18446744072104596016 strong>
为什么不只 1550793600 秒?
time_t
值不是可移植的吗?
在调用tm struct
之前,在gdb控制台中打印出的mktime()
具有以下值:
(gdb) p ltm
$4 = {tm_sec = 0, tm_min = 0, tm_hour = 0, tm_mday = 22, tm_mon = 1, tm_year = 19, tm_wday = 0, tm_yday = 0, tm_isdst = 0}
答案 0 :(得分:3)
给予
tm_year = 19
如果您期望该输入代表2019年,则您错误地使用了mktime()
。
按照C标准的7.27.1 Components of time, paragraph 4:
tm结构至少应包含以下成员 订购。成员的语义及其正常范围是 在评论中表达。
int tm_sec; // seconds after the minute -- [0, 60] int tm_min; // minutes after the hour -- [0, 59] int tm_hour; // hours since midnight -- [0, 23] int tm_mday; // day of the month -- [1, 31] int tm_mon; // months since January -- [0, 11] int tm_year; // years since 1900 int tm_wday; // days since Sunday -- [0, 6] int tm_yday; // days since January 1 -- [0, 365] int tm_isdst; // Daylight Saving Time flag
请注意,tm_year
的值以自1900年以来的年份表示。
您可能会在1919年2月22日获得time_t
值,即-1604966400或18446744072104596016未签名。
答案 1 :(得分:1)
在二进制18446744072104596016中是具有64位的11111111111111111111111111111111101000000101011001010010001000110000
可能您将负值-1604955598用作无符号数字