mktime在某些年份遇到问题?

时间:2015-10-30 13:34:01

标签: c mktime

我在mktime()中遇到了多年的问题。

每次我将低于1970年的年份传递到我的struct tm然后运行mktime()函数来转换我的结构时,它会失败(返回-1)。

有没有人知道为什么以及我能否以某种方式完成这项工作?

2 个答案:

答案 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.