[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [FW1] Dayligth saving time problem explanation [Fw: [BUGTRAQ] The April Fools 2001 bug in Windows]
It looks like that you experience the problem discussed in the message below (from BugTraq) And it is going to last for a week. ----- Original Message ----- From: "Richard M. Smith" <[email protected]> To: <[email protected]> Sent: Wednesday, March 28, 2001 3:14 PM Subject: [BUGTRAQ] The April Fools 2001 bug in Windows > Hi, > > Attached is a message I wrote 2 years ago about a time-related bug in > Windows. It turns out the bug is going to hit on this Sunday. > Applications built with certain versions of Visual C++ could > start giving the wrong time of day starting on Sunday. The problem > will last for a week. > > Microsoft released a patch for this problem in early 1999, > and many computers have been updated with a fix. However, > in some cases applications also need to be updated and it is > very unclear how many of them are deployed with the > bug. This bug will most likely be present in embedded computers > that are dedicated to doing particular jobs. These systems > typically don't get software updates as often as desktop > computers. > > Some systems that might be affected by the bug include: > > - Airport arrival and departure time monitors > - Building access control systems > - Scheduling systems for transportation > - Hotel wake-up systems > > I've attached a second message which details how the problem > also affects programs that use the MFC library. > > Here is a Microsoft FAQ about the bug: > > http://msdn.microsoft.com/visualc/headlines/2001.asp > > My crystal ball is very fuzzy is if this bug is going > to cause any problems or not. > > Richard M. Smith > CTO, Privacy Foundation > > ======================================================================== > > From Thu Jan 7 08:35:45 1999 > Date: Thu, 7 Jan 1999 10:18:33 +0100 > From: Richard M. Smith > To: [email protected] > Subject: The Windows "April Fools 2001" bug > > January 7, 1999 > > I have discovered a serious bug in Windows which will cause > many Windows applications to give the incorrect time starting > on April 1, 2001. Although this new bug is not technically a Y2K > bug, it is similar because programs will fail on a particular > day in the next century. > > The bug causes Windows applications to give times which are off by one hour > even though the Windows clock shows the correct time. The bug will continue > for one week until April 8th of 2001, when applications will again show the > correct time. The bug occurs under Windows 95, 98, and NT. > > The problem is caused by the Visual C++ runtime library being > confused and assuming that daylight saving time doesn't start until > April the 8th. In fact, daylight saving time starts on April 1 in > the year 2001. The confusion appears to be caused by the fact that > April 1 falls on a Sunday in the year 2001. The same bug occurs > in other years where April 1 also falls on a Sunday. The last time this > happened was in 1990 and after 2001 it will occur again in 2007. If April 1 > falls on any other day of the week, the bug does not occur. > > I reported the bug to Microsoft on Jan. 5th and got confirmation of > from them on the evening of Jan. 6th. At the present time, Microsoft told > me that they don't know when a fix will be available for the bug. > > For some applications, users should be able to fix the > problem by downloading a new version of the Visual C++ runtime > library DLL, MSVCRT.DLL. Since the DLL now ships as part of Windows, > I would assume the fixed DLL will be available of the Windows Update > site. > > Unfortunately not all applications can be corrected with a new release of > MSVCRT.DLL. Any applications which statically links with the Visual C++ > runtime will have to be fixed by the application vendor. Users will > have to download the new releases of these kinds of applications. > > In my testing, I believe that the bug was introduced in version 4.1 of > Visual C++. It is present in versions 4.2, 5.0, and 6.0 according to > my testing. > > At the present time, the bug has been confirmed only in North American > time zones. Outside North America it is unknown if the same bug > exists or not. If it does exists, it may occur on different days > and different years. > > I have written a small program in C that tests for the problem. > The source code for the test program is attached to the end of this > message. > > This "April Fools 2001" bug is present in the localtime() function, but > is probably also in other functions defined in the C language "time.h" > header file. > > Here is the output from the test program under Windows 98: > > 0x3AC796D0 = Sunday, April 1, 2001 -- 16:00:00 Eastern Standard Time -- > DOY=90 > 0x3ACF2B70 = Saturday, April 7, 2001 -- 10:00:00 Eastern Standard Time -- > DOY=96 > 0x3AD06EE0 = Sunday, April 8, 2001 -- 10:00:00 Eastern Daylight Time -- > DOY=97 > > The hours and time zones are incorrect for April 1st and April 7th. The > time > on April 8th is correct. > > A bit of background. In the United State and Canada, daylight > saving time (DST) always starts on the first Sunday in April and ends on > the last Sunday in October. More information of the DST rules can > be found in the article at http://www.energy.ca.gov/daylightsaving.html. > > I am interested for folks to test for this same bug in other > operating systems and programming tools. If you do run any tests, > I would appreciate in hearing the results via Email. I know that > JavaScript has the bug in Netscape and Internet Explorer as well as > Win32 version of Perl. Excel and Netscape Java Virtual Machine on > the other hand seem immune to the bug. > > Thanks, > Richard M. Smith > > -------------------------------------------------------------------------- -- > ---- > > // > // APRIL1.C -- Simple test program for the "April's Fools 2001" bug > // > // by Richard M. Smith > // copyright (C) 1999 > // > > #include <stdio.h> > #include <time.h> > #include <string.h> > > #define SECS_PER_HOUR (60 * 60) > #define SECS_PER_DAY (24 * SECS_PER_HOUR) > #define SECS_PER_YEAR (365 * SECS_PER_DAY) > > #define START (3 * SECS_PER_DAY) > #define INCR (23 * SECS_PER_HOUR) > #define MAXTIMES ((0x80000000L - START) / INCR) > > void print_time(time_t mytime); > > char *month_tab[] = > { > "January", > "February", > "March", > "April", > "May", > "June", > "July", > "August", > "September", > "October", > "November", > "December" > }; > > char *dow_tab[] = > { > "Sunday", > "Monday", > "Tuesday", > "Wednesday", > "Thursday", > "Friday", > "Saturday" > }; > > int main() > > { > > print_time(0x3AC796D0); // Sunday, April 1, 2001 > print_time(0x3ACF2B70); // Saturday, April 7, 2001 > print_time(0x3AD06EE0); // Sunday, April 8, 2001 > return 0; > > } > > // > // print_time -- print out a time_t value converted by localtime() > // > > void print_time(time_t mytime) > > { > > char month[100]; > char dow[100]; > struct tm *tmp; > > tmp = localtime(&mytime); > if(tmp == NULL) > { > printf("0x%08lX = Invalid time\n", mytime); > return; > } > if(tmp->tm_mon >= 0 && tmp->tm_mon <= 11) > strcpy(month, month_tab[tmp->tm_mon]); > else > sprintf(month, "BadMonth=%d", tmp->tm_mon); > if(tmp->tm_wday >= 0 && tmp->tm_wday <= 6) > strcpy(dow, dow_tab[tmp->tm_wday]); > else > sprintf(month, "BadDOW=%d", tmp->tm_wday); > printf("0x%08lX = %s, %s %d, %d -- %d:%02d:%02d %s -- DOY=%d\n", > mytime, dow, month, tmp->tm_mday, tmp->tm_year + 1900, > tmp->tm_hour, tmp->tm_min, tmp->tm_sec, _tzname[tmp->tm_isdst != > 0], > tmp->tm_yday); > return; > > } > > ========================================================================= > > From: "Richard M. Smith" > Subject: MFC and the April Fools 2001 bug > Date: 18 Jan 1999 00:00:00 GMT > Newsgroups: microsoft.public.vc.mfc,microsoft.public.vc.language > > Hello, > > A couple of weeks ago I reported a serious bug to Microsoft > with the localtime() function of the C runtime library. This > bug will cause many Windows applications to show the incorrect > time of day starting on April 1, 2001. The bug will last for one > week. The bug is due to the Visual C++ runtime library being confused > about the start date for daylight saving time. Microsoft has > confirmed the bug and is currently working on a fix. > > Today I did more research on the bug and found that bug is also > present in the MFC library. In particular, the two MFC classes > for dealing with times and dates, CTime and COleDateTime, both > have the bug. The reason that both classes have the bug because > they call the broken localtime() function as well as mktime() > which I discovered today also has the bug. > > I located the April Fools 2001 bug in MFC by first searching > the MFC source code for calls to localtime() and mktime(). I then > confirmed these bugs by building a short C++ test program that uses > CTime and ColeDateTime classes. This test program displayed the > wrong times when I moved my Windows clock forward to April 1, 2001. > > Here are the member functions of MFC which have the "April Fools > 2001" bug: > > CTime::CTime > CTime::GetCurrentTime > CTime::GetLocalTm > CTime::GetHour > CTime::GetDay > CTime::GetDayOfWeek > CTime::Format > > COleDateTime::COleDateTime (with a time_t argument only) > COleDateTime::GetCurrentTime > > The following MFC classes also make use of CTime class so they will > likely hit the "April Fools 2001" bug when dealing with times and dates: > > CTimeSpan > CFileFind > CFile > CGopherFileFind > COleStreamFile > CDateTimeCtrl > CMonthCalCtrl > > The C runtime functions with the bug are: > > ctime > localtime > mktime > _strtime > _strdate > > Microsoft has created a Web page for news about the April Fools 2001 bug. > The URL of the page is: > > http://msdn.microsoft.com/visualc/headlines/2001.asp > > Richard M. Smith ================================================================================ To unsubscribe from this mailing list, please see the instructions at http://www.checkpoint.com/services/mailing.html ================================================================================
|