读书人

好怪异的mktime函数解决思路

发布时间: 2012-02-28 13:06:34 作者: rapoo

好怪异的mktime函数
int main()
{
struct tm tTime;
time_t tmT = 0;
memset((void *)&tTime, 0, sizeof(tTime));
tTime.tm_year = 80;
//tTime.tm_isdst = 1;
tmT = mktime(&tTime);
printf( "%d\n ", tmT);
return 0;
}
这段程序为什么在linux和Windows下运行得到的结果不一样,各位帮忙看下。

[解决办法]
mktime - convert broken-down time into time since the Epoch

SYNOPSIS


#include <time.h>

time_t mktime(struct tm *timeptr);

DESCRIPTION

The mktime() function converts the broken-down time, expressed as local time, in the structure pointed to by timeptr, into a time since the Epoch value with the same encoding as that of the values returned by time(). The original values of the tm_wday and tm_yday components of the structure are ignored, and the original values of the other components are not restricted to the ranges described in the <time.h> entry.

A positive or 0 value for tm_isdst causes mktime() to presume initially that Daylight Savings Time, respectively, is or is not in effect for the specified time. A negative value for tm_isdst causes mktime() to attempt to determine whether Daylight Saving Time is in effect for the specified time.

Local timezone information is set as though mktime() called tzset().

Upon successful completion, the values of the tm_wday and tm_yday components of the structure are set appropriately, and the other components are set to represent the specified time since the Epoch, but with their values forced to the ranges indicated in the <time.h> entry; the final value of tm_mday is not set until tm_mon and tm_year are determined.

RETURN VALUE

The mktime() function returns the specified time since the Epoch encoded as a value of type time_t. If the time since the Epoch cannot be represented, the function returns the value (time_t)-1.

ERRORS

No errors are defined.

EXAMPLES

What day of the week is July 4, 2001?


#include <stdio.h>
#include <time.h>

struct tm time_str;

char daybuf[20];

int main(void)
{
time_str.tm_year = 2001 - 1900;
time_str.tm_mon = 7 - 1;
time_str.tm_mday = 4;
time_str.tm_hour = 0;
time_str.tm_min = 0;
time_str.tm_sec = 1;
time_str.tm_isdst = -1;
if (mktime(&time_str) == -1)
(void)puts( "-unknown- ");
else {
(void)strftime(daybuf, sizeof(daybuf), "%A ", &time_str);
(void)puts(daybuf);
}
return 0;
}


[解决办法]

探讨
原来是linux和Windows中的时区不同造成的,呵呵

读书人网 >C语言

热点推荐