I have the following code:
struct tm time;
strptime("27052010", "%d%m%Y", &time);
cout << "sec: " << time.tm_sec << "\n";
cout << "min: " << time.tm_min << "\n";
cout << "hour: " << time.tm_hour << "\n";
cout << "day: " << time.tm_mday << "\n";
cout << "month: " << (time.tm_mon + 1) << "\n";
cout << "year: " << time.tm_year << "\n";
time_t t = mktime(&time);
cout << "sec: " << time.tm_sec << "\n";
cout << "min: " << time.tm_min << "\n";
cout << "hour: " << time.tm_hour << "\n";
cout << "day: " << time.tm_mday << "\n";
cout << "month: " << (time.tm_mon + 1) << "\n";
cout << "year: " << time.tm_year << "\n";
cout << "time: " << t << "\n";
输出结果为:
sec: 1474116832
min: 32767
hour: 4238231
day: 27
month: 5
year: 110
sec: 52
min: 0
hour: 6
day: 2
month: 9
year: 640
time: 18008625652 (Fri, 02 Sep 2540 04:00:52 GMT)
我的问题是为什么
mktime()
会改变time
的值,转换后的time_t
为什么不等于我的输入日期。我期望输出的是自1970年以来以秒为单位表示的日期(2010年5月27日=1330905600)。提前致谢。
mktime
函数之前,time.tm_hour
、time.tm_min
和time.tm_sec
的值是什么? - Wintermutestrptime()
前,清除time
,否则其他字段中的随机值将通过mktime()
调整为其正常范围,并影响年、月、日。 - chux - Reinstate Monicamktime()
会检查除了tm_yday
和tm_wday
之外的所有字段。因此,其他7个(或更多)字段的状态需要初始化。 - chux - Reinstate Monica