การแก้ไข: ข้อบกพร่องของตามฤดูกาลของฤดูในไลบรารี C ของเวลาเรียกใช้

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 214661 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
บทความนี้ถูกเก็บถาวรแล้วเนื้อหาของบทความจึงถูกนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

ฟังก์ชันวัน / เวลาของไลบรารี C เรียกใช้เวลาอาจล้มเหลวในการคำนวณเวลาถูกต้องในระหว่างสัปดาห์แรกของการปรับบันทึกเวลาเริ่มต้น 1 เมษายน 2001 ตามกาล จุดบกพร่องแก้ไขตัวเองหลังจากที่หนึ่งสัปดาห์ บนเว็บไซต์ต่อไปนี้ในวันอาทิตย์ จุดบกพร่องนี้ไม่เกี่ยวข้องกับปัญหาปี 2000

สาเหตุ

จุดบกพร่องมีสาเหตุจากข้อผิดพลาดทางตรรกะในฟังก์ชันผู้ช่วยเหลือ cvtdate ของไลบรารี C เรียกใช้เวลา

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วนเริ่มต้นของเอกสารนี้จุดบกพร่องนี้ถูกแก้ไขใน Visual Studio 6.0 Service Pack 3สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Visual Studio เซอร์วิสแพ็ค โปรดดูบทความในฐานความรู้ของ Microsoft ต่อไปนี้:

ข้อมูล 194022: วิสแพ็คบริการ Studio 6.0 Visual สิ่ง ที่ ทำไม

HOWTO 194295: บอกว่า มีการติดตั้งวิสแพ็ค Studio 6.0 บริการแสดงผล

ข้อมูลเพิ่มเติม

ขั้นตอนในการทบทวนเกิดลักษณะการทำงาน

โปรแกรมตัวอย่างต่อไปนี้ reproduces ปัญหา:

// ----------------- start of sample program -------------------------

// Compiler switches needed : none.

#include <time.h>;
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

int main ()
{
    struct tm ltm;
    time_t tstamp = 0;

    ltm.tm_year = 90;	/* First valid year .*/ 
    ltm.tm_mon = 3;		/* April. */ 
    ltm.tm_mday = 1;	/* 1st of the month. */ 
    ltm.tm_hour = 3;	/* At 3:00 am. */ 
    ltm.tm_min = 0;
    ltm.tm_sec = 0;
    ltm.tm_wday =0;
    ltm.tm_yday = 0;

    while (ltm.tm_year <= 2005)
    {
        ltm.tm_isdst = -1;

	// mktime indirectly calls cvtdate which has the logic bug.
	tstamp = mktime(&ltm);

	/* If it's Sunday April 1st, it should also be DST */ 
	if (!ltm.tm_wday && !ltm.tm_isdst)
	{
	    printf("April 01 is the first Sunday in April, %d  \ 
            -it should be DST but tm_isdst says it's \ 
            not!\n", 1900+ltm.tm_year);
	    while (!ltm.tm_isdst)
	    {
		ltm.tm_mday++;
		ltm.tm_isdst=-1;
		tstamp = mktime(&ltm);
	    }
	    printf("\tDST is reported as starting on  \ 
            %d/%d/%d\n", 1+ltm.tm_mon, ltm.tm_mday, \ 
	    1900+ltm.tm_year);
	
            ltm.tm_mday = 1;
	}
	
        ltm.tm_year++;
	
    }

    return 0;
}


// ----------------- end  of sample program ---------------------------
				

ข้อมูลอ้างอิง

คุณสมบัติ

หมายเลขบทความ (Article ID): 214661 - รีวิวครั้งสุดท้าย: 23 กุมภาพันธ์ 2557 - Revision: 1.0
ใช้กับ
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Keywords: 
kbnosurvey kbarchive kbhotfixserver kbqfe kbbug kbcrt kbfix kbvs600sp3fix kbmt KB214661 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:214661

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com