我在mktime()
中遇到了多年的问题。
每次我将低于1970年的年份传递到我的struct tm
然后运行mktime()
函数来转换我的结构时,它会失败(返回-1)。
有没有人知道为什么以及我能否以某种方式完成这项工作?
答案 0 :(得分:7)
这永远不会起作用,因为它是the epoch之外的定义,这是Unix时间的开始。 The manual page州:
ctime()
,gmtime()
和localtime()
函数都采用数据类型time_t的参数,表示日历时间。当解释为绝对时间值时,它表示自纪元,1970-01-01 00:00:00 +0000(UTC)以来经过的秒数。
如果无法将输入转换为Unix时间,则会记录它以返回-1
,以便您查看该结果的原因。
答案 1 :(得分:3)
这是预期的行为。根据{{3}}:
If the specified broken-down time cannot be represented as calendar time (seconds since the Epoch), mktime() returns (time_t) -1 and does not alter the members of the broken-down time structure.