mktime返回错误的时间戳(关闭整整一个月)
我使用mktime
从当前本地时间创建一个unix时间戳:
#include int _tmain(int argc, _TCHAR* argv[]) { struct tm info; // 16.05.2014 info.tm_mday = 16; info.tm_mon = 5; info.tm_year = 114; // Years since 1900 // 08:00:00 Uhr info.tm_hour = 8; info.tm_min = 0; info.tm_sec = 0; // Convert to Unix timestamp info.tm_isdst = -1; time_t timestamp = mktime(&info); printf("Timestamp: %i", timestamp); }
这给了我:
1402898400
将此转换回人类可读时间(通过某个网站)时,转换为:
16.06.2014 08:00:00
正如你所看到的,这是我预期的一个月(放在五月(5),六月(6))。 为什么?
C11 7.27.1时间的组成部分
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_mon
从0
开始,而不是1
。 所以5
的值意味着它是6月,而不是5月。