Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   mktime and DST. (http://www.velocityreviews.com/forums/t315653-mktime-and-dst.html)

Gore 10-07-2003 08:31 AM

mktime and DST.
 
hi,

I tried the following piece of code
long sec = -1;
struct tm date;
date.tm_year = 1995 - 1900;
date.tm_mon = 7 - 1;
date.tm_mday = 16;
date.tm_hour = 0;
date.tm_min = 0;
date.tm_sec = 0;

date.tm_isdst = 0;

sec = mktime(&date);

The value returned by mktime when tm_isdst is set to 0 is different
from the value returned by mktime when tm_isdst is set to -1 or 1. Why
is that?
The date given is 16th July 1995 00:00:00.

The compiler is used MSVC 6.0 Service pack 5.
Observed the same behavious on Sun Solaris.
My machine has the us-pacific time set ( GMT - 8 Hours ).

Mihir

Richard Bos 10-07-2003 09:29 AM

Re: mktime and DST.
 
mihirgore@hotmail.com (Gore) wrote:

> I tried the following piece of code
> long sec = -1;
> struct tm date;
> date.tm_year = 1995 - 1900;
> date.tm_mon = 7 - 1;
> date.tm_mday = 16;
> date.tm_hour = 0;
> date.tm_min = 0;
> date.tm_sec = 0;
>
> date.tm_isdst = 0;
>
> sec = mktime(&date);
>
> The value returned by mktime when tm_isdst is set to 0 is different
> from the value returned by mktime when tm_isdst is set to -1 or 1. Why
> is that?
> The date given is 16th July 1995 00:00:00.


Because your system thinks that DST is in place at that date and time in
your time zone. It certainly is in my timezone at that date.
tm_isdtd==0 means "I know DST is not in effect. Compute this timestamp
assuming that it isn't." tm_isdst>0 means "I know DST is in effect.
Compute this timestamp assuming that it is." tm_isdst<0 means "I don't
know whether DST is in effect now. Please determine this for me, then
compute this timestamp with the determined DST setting."
If the computer thinks DST is in effect, then yes, tm_isdst==-1 would
give the same result as tm_isdst==1. Had it thought DST were not in
effect, tm_isdst==-1 would give the same result as tm_isdtd==0.

Richard


All times are GMT. The time now is 05:49 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.