mktime() 返回大量秒数
mktime() returning a huge amount of seconds
在一个简单的测试中,获取从 de Unix Epoch(01/01/1970 00:00:00 UTC)到 2019 年 2 月 22 日的经过时间(以秒为单位),它返回了大量 18446744072104596016
为什么不只是 1550793600 秒?
time_t
值不是可移植的吗?
在 gdb 控制台中打印出的 tm struct
在调用 mktime()
之前具有以下值:
(gdb) p ltm
= {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}
在二进制中 18446744072104596016 是 1111111111111111111111111111111110100000010101100101001000110000 具有 64 位
您可能将负值 -1604955598 用作无符号数
给出
tm_year = 19
如果您希望输入代表 2019 年,那么您使用的 mktime()
是错误的。
根据 C 标准的 7.27.1 Components of time, paragraph 4:
The tm structure shall contain at least the following members, in any
order. The semantics of the members and their normal ranges are
expressed in the comments.
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 unsigned。
在一个简单的测试中,获取从 de Unix Epoch(01/01/1970 00:00:00 UTC)到 2019 年 2 月 22 日的经过时间(以秒为单位),它返回了大量 18446744072104596016
为什么不只是 1550793600 秒?
time_t
值不是可移植的吗?
在 gdb 控制台中打印出的 tm struct
在调用 mktime()
之前具有以下值:
(gdb) p ltm
= {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}
在二进制中 18446744072104596016 是 1111111111111111111111111111111110100000010101100101001000110000 具有 64 位
您可能将负值 -1604955598 用作无符号数
给出
tm_year = 19
如果您希望输入代表 2019 年,那么您使用的 mktime()
是错误的。
根据 C 标准的 7.27.1 Components of time, paragraph 4:
The tm structure shall contain at least the following members, in any order. The semantics of the members and their normal ranges are expressed in the comments.
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 unsigned。