เมื่อพัฒนาแอปพลิเคชัน มักจำเป็นต้องได้รับเวลาของระบบปัจจุบัน แม้ว่า Y2K ดูเหมือนจะตามหลังเรา แต่เรายังคงต้องระมัดระวังเกี่ยวกับวิธีจัดการกับเวลาในแอปพลิเคชันที่พัฒนาขึ้นใหม่ของเรา
หน้า 89 ของ "บูรณาการ - ทักษะการปฏิบัติ Delphi 4.0" (ต่อไปนี้จะเรียกว่า "หนังสือ") แนะนำสองวิธีในการรับเวลาของระบบปัจจุบันโดยเฉพาะ แต่ทั้งสองวิธีมีข้อบกพร่องหรือข้อผิดพลาด ซึ่งจะกล่าวถึงด้านล่าง
วิธีแรกในหนังสือเล่มนี้คือการใช้ฟังก์ชัน Time() เพื่อรับเวลาของระบบปัจจุบัน และผลลัพธ์ที่ส่งคืนจะเป็นตัวแปรของประเภทโครงสร้าง TDateTime ตัวอย่างเช่น:
ขั้นตอน TForm1.Button2Click (ผู้ส่ง: TObject);
var
วันที่และเวลา:TDateTime;
เริ่ม
วันที่และเวลา:=เวลา();
คำบรรยายภาพ:=DateToStr(DateTime)+' '+TimeToStr(DateTime);
จบ;
แต่ไม่ว่าจะเป็นวันที่อะไร ผลลัพธ์ก็คือ 99-12-30 xx:xx:xx แน่นอนว่าวันที่ผิด ด้วยการวิเคราะห์ความช่วยเหลือของ Delphi นั้น Time() จะถูกใช้เพื่อส่งคืน "เวลา - ชั่วโมง นาที และวินาที" ที่ถูกต้อง ซึ่งก็คือ TimeToStr (DateTime) และไม่ควรใช้เพื่อส่งคืน "date" ที่จริงแล้ว ฟังก์ชันระบบเดียวที่ใช้ในการส่งคืนวันที่คือ Date
ดังนั้นสิ่งที่สามารถส่งคืน "ชั่วโมง นาที วินาที" ที่ถูกต้อง และ "ปี เดือน วัน" ที่ถูกต้องได้ คุณสามารถใช้ฟังก์ชัน Now ได้ เช่น:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
var
เวลาของฉัน: TDateTime;
เริ่ม
เวลาของฉัน:=ตอนนี้;
คำบรรยายภาพ:=DateToStr(mytime)+' '+TimeToStr(mytime);
//หรือใช้คำบรรยายโดยตรง := DateTimeToStr(Now);
จบ;
รูปแบบวันที่ที่ส่งคืนโดย Now มีเพียง 2 หลักสำหรับปี นั่นคือปี 2000 จะแสดงเป็น 00 ซึ่งดูไม่น่าพอใจ นอกจากนี้ ทั้ง Now และเวลา สามารถรับเวลาที่แม่นยำเป็นวินาทีเท่านั้น เวลาระดับมิลลิวินาทีที่แม่นยำ คุณสามารถใช้ฟังก์ชัน API GetSystemTime และประเภท TSystemTime ที่เกี่ยวข้องถูกกำหนดเป็น:
TSystemTime = บันทึก
ปี: คำ;
wเดือน: Word;
wDayOfWeek: คำ;
วัน: Word;
ซึ่งชั่วโมง: Word;
นาที: Word;
ครั้งที่สอง: คำ;
wมิลลิวินาที: Word;
จบ;
แน่นอนว่าโครงสร้างของมันยังสามารถนำมาใช้ได้อย่างสะดวกในลอจิกของโปรแกรมเพื่อสร้างค่าเวลาต่างๆ ดังนั้นการใช้ฟังก์ชัน GetSystemTime จึงมีข้อดีอย่างมาก อย่างไรก็ตาม การใช้ฟังก์ชันนี้ในหนังสือไม่ถูกต้อง เมื่อศึกษาวิธีใช้ Windows SDK เราจะเห็นว่าต้นแบบของฟังก์ชันนี้คือ:
VOID GetSystemTime(LPSYSTEMTIME lpst) ตัวชี้พารามิเตอร์ lpst รับเวลาของระบบ ดังนั้นจึงสามารถนำมาใช้เป็นส่วนโปรแกรมต่อไปนี้:
ขั้นตอน TForm1.Button3Click (ผู้ส่ง: TObject);
var
SysTime: TsystemTime;
เริ่ม
GetSystemTime(SysTime);
คำบรรยายภาพ:=IntToStr(SysTime.wYear)+' '+IntToStr(SysTime.wMonth);
//ถ้า SysTime.wYear>2000 แล้ว
//...ใช้ค่าเวลาต่างๆ ที่ได้รับในลอจิกของโปรแกรม
จบ;
จากการสนทนาข้างต้น จะสะดวกและยืดหยุ่นมากขึ้นในการรับเวลาระบบปัจจุบันโดยใช้ฟังก์ชัน GetSystemTime