โดยทั่วไป มีโครงสร้างข้อมูลหลายอย่างที่ใช้อธิบายเวลาใน Delphi และการดำเนินการของเวลาก็คือการทำงานของโครงสร้างเหล่านี้เป็นหลัก
ประเภท TDateTime:
ประเภทข้อมูลที่ใช้บ่อยที่สุดในการแสดงวันที่และเวลาใน Delphi คือประเภท TDateTime คุณสามารถกำหนดตัวแปรวันที่สำหรับวันที่ทำงานในโปรแกรมได้เช่นเดียวกับจำนวนเต็มทั่วไป ประเภท TdateTime นั้นเป็นหมายเลขประเภท Double โดยพื้นฐานแล้วประเภท TdateTime ถูกกำหนดไว้ใน Delphi ดังนี้: ประเภท TDateTime = ประเภท Double อัลกอริธึมเฉพาะคือการใช้ส่วนจำนวนเต็มของหมายเลข Double เพื่อแสดงวันที่ โดยมีวันที่ 30 ธันวาคม 1989 เป็น จุดฐาน บวกและลบเป็นวัน เช่น เลข 1 แทนวันที่ 1 มกราคม 1900 และเลข -1 แทนวันที่ 29 ธันวาคม 1989 ส่วนทศนิยมใช้เพื่อแสดงเวลา โดยค่าของมันคืออัตราส่วนของเวลาที่จะแสดงต่อเวลารวมของวัน ตัวอย่างเช่น 6 โมงเช้าคือ 6/24=0.25 และ 6: 15 ในตอนเช้าคือ (6*60+15)/ (24*60)=0.2604166666666666666666666667 ด้านล่างมีตัวอย่างหลายรายการเพื่อแสดงปฏิสัมพันธ์ระหว่างประเภท TDateTime และประเภท Double
0 30/12/2442 00:00:00 น
2.75 1/1/63 18:00:00 น
-1.25 29/12/2442 6:00:00 น
35065 1/1/2539 00:00:00
ฉันเชื่อว่าทุกคนสามารถเข้าใจวิธีการแปลงระหว่าง TdateTime และ Double ได้ ดังนั้น การดำเนินการของ TDateTime โดยพื้นฐานแล้วจึงเหมือนกับของ Double
ประเภท TTimeStamp:
นี่คือประเภทโครงสร้างที่ใช้อธิบายวันที่และเวลา ซึ่งกำหนดไว้ใน Delphi ดังนี้:
ประเภท TTimeStamp = เวลาบันทึก: จำนวนเต็ม; {จำนวนมิลลิวินาทีตั้งแต่เที่ยงคืนถึงเวลาที่กำหนด} วันที่: จำนวนวันนับจากวันนี้ถึงวันที่ระบุ} สิ้นสุด;
เมื่อเปรียบเทียบกับ TDateTime ก็สามารถแสดงเวลาที่มีความแม่นยำสูงได้ง่ายกว่า และโดยทั่วไปจะใช้สำหรับการดำเนินการระดับมิลลิวินาทีและสำหรับการแสดงเวลาที่นานกว่า
ประเภท PsystemTime:
โครงสร้างตัวชี้ที่ใช้สำหรับการดำเนินการเวลาใน WinApi คำจำกัดความของเขาคือ:
พิมพ์ PSystemTime = ^TSystemTime = wYear: Word; wMonth: Word;
โครงสร้างนี้ส่วนใหญ่จะใช้เมื่อเรียกใช้การดำเนินการ WinApi
หลังจากที่เข้าใจสาระสำคัญของเวลาประเภทต่างๆ แล้ว ฉันเชื่อว่าทุกคนมีชุดความคิดสำหรับการจัดการเวลาประเภทนี้ อย่างไรก็ตาม Delphi ยังมีชุดฟังก์ชันกระบวนการที่สมบูรณ์สำหรับการจัดการเวลาอีกด้วย ในตอนนี้ ผมจะแนะนำให้คุณรู้จักฟังก์ชันที่เกี่ยวข้องใน Delphi:
ฟังก์ชันสำหรับการจัดการเวลา
ฟังก์ชั่นวันที่:
คำจำกัดความ: วันที่: TDateTime;
ฟังก์ชั่น: ส่งกลับวันที่ปัจจุบัน
ตัวอย่าง:
CurrentDate := วันที่;
ฟังก์ชัน DayOfWeek:
คำจำกัดความ: ฟังก์ชัน DayOfWeek (วันที่: TDateTime): จำนวนเต็ม;
ฟังก์ชัน: รับค่าวันในสัปดาห์ของวันที่ที่ระบุและส่งกลับ 1 ถึง 7 ซึ่งแสดงถึงวันอาทิตย์ถึงวันเสาร์
ฟังก์ชัน IncMouth:
คำจำกัดความ: ฟังก์ชั่น IncMonth (วันที่ const: TDateTime; NumberOfMonths: จำนวนเต็ม): TDateTime;
ฟังก์ชั่น: ค้นหาวันที่ของวันที่ที่กำหนด ข้อมูลหลังจาก NumberOfMonths เดือน
ตัวอย่าง:
วันที่ 1 := IncMonth (วันที่ 10);
ถ้าวันนี้คือ 5-2545-3 ดังนั้น Date1 ก็คือ 2546-3-3
ฟังก์ชัน IsLeapYear:
คำจำกัดความ: ฟังก์ชัน IsLeapYear (ปี: Word): บูลีน;
ฟังก์ชัน: ตรวจสอบว่าปีที่ระบุเป็นปีอธิกสุรทินหรือไม่
ตัวอย่าง:
ถ้า isLeapYear(2000) แล้ว ShowMessage('ปีนี้เป็นปีอธิกสุรทิน');
ตอนนี้ฟังก์ชั่น:
คำจำกัดความ: ฟังก์ชั่นตอนนี้: TDateTime;
ฟังก์ชั่น: ใช้เพื่อรับวันที่และเวลาปัจจุบัน
ตัวอย่าง:
CurrentDateTime := ตอนนี้;
ขั้นตอนแทนที่วันที่
คำจำกัดความ: ขั้นตอนแทนที่วันที่ (var DateTime: TDateTime; const NewDate: TDateTime);
ฟังก์ชัน: ใช้ส่วนวันที่ของพารามิเตอร์ Newdate เพื่อแทนที่ส่วนวันที่ของพารามิเตอร์ DateTime แต่ไม่ต้องเปลี่ยนส่วนเวลา
ขั้นตอนแทนที่วันที่
คำจำกัดความ: กระบวนการแทนที่เวลา (var DateTime: TDateTime; const NewTime: TDateTime);
ฟังก์ชัน: ใช้ส่วนเวลาของพารามิเตอร์ Newdate เพื่อแทนที่ส่วนเวลาของพารามิเตอร์ DateTime แต่ไม่ต้องเปลี่ยนส่วนวันที่
หากใช้สองกระบวนการข้างต้นร่วมกัน จะเทียบเท่ากับการมอบหมายงาน
ฟังก์ชั่นเวลา:
คำจำกัดความ: ฟังก์ชั่น เวลา: TDateTime;
ฟังก์ชั่น: กลับเวลาปัจจุบัน
ตัวอย่าง:
เวลาปัจจุบัน := เวลา;
ฟังก์ชันการแปลงระหว่างประเภทเวลาต่างๆ
ฟังก์ชัน DateTimeToFileDate:
คำจำกัดความ: DateTimeToFileDate (DateTime: TDateTime): จำนวนเต็ม;
ฟังก์ชัน: แปลงเวลาประเภท TDateTime เป็นเวลาในสภาพแวดล้อม Dos วิธีการเข้าถึงเป็นเวลาในสภาพแวดล้อม Dos แตกต่างจากประเภท TdateTime ใน VCL เมื่อดำเนินการกับไฟล์ เพื่อรักษาความสอดคล้องของเวลา คุณต้องใช้ฟังก์ชัน DateTimeToFileDate หลังจากการแปลง ค่าจำนวนเต็มที่ส่งคืนคือค่าที่ใช้อธิบายเวลาภายใต้ Dos
ขั้นตอน DateTimeToSystemTime:
คำจำกัดความ: ขั้นตอน DateTimeToSystemTime (DateTime: TDateTime; var SystemTime: TSystemTime);
ฟังก์ชัน: แปลงเวลาประเภท TDateTime เป็นประเภท TSystemTime ที่ใช้โดยฟังก์ชัน Win API ซึ่งใช้เมื่อใช้ฟังก์ชัน WinApi เพื่อจัดการเวลา
ฟังก์ชัน SystemTimeToDateTime:
คำจำกัดความ: ฟังก์ชั่น SystemTimeToDateTime (const SystemTime: TSystemTime): TDateTime;
ฟังก์ชัน: แปลงหมายเลขประเภท TSysTemTime ที่ได้รับในฟังก์ชัน WinApi ให้เป็นประเภท TDateTime
ฟังก์ชัน DateTimeToTimeStamp:
ฟังก์ชัน TimeStampToDateTime:
คำจำกัดความ: DateTimeToTimeStamp (DateTime: TDateTime): TTimeStamp;
ฟังก์ชัน TimeStampToDateTime (const TimeStamp: TTimeStamp): TDateTime;
ฟังก์ชัน: ใช้เพื่อแปลงระหว่างประเภท TDataTime และ TTimeStamp TDataTime ใช้ double เพื่ออธิบายเวลา ในขณะที่ TTimeStamp ใช้จำนวนเต็มสองตัวเพื่ออธิบายเวลาตามลำดับ ความแตกต่างระหว่างทั้งสองประเภทสามารถพบได้ในส่วนคำอธิบายประเภทข้อมูลที่ตอนต้นของบทความ
ฟังก์ชัน EncodeDate:
คำจำกัดความ: ฟังก์ชัน EncodeDate (ปี เดือน วัน: Word): TDateTime;
ฟังก์ชัน: ป้อนค่าปี เดือน และวัน แล้วส่งกลับวันที่เป็นประเภท TDateTime ช่วงปีคือ 1-9999 ช่วงเดือนคือ 1-12 และช่วงวันที่จะขึ้นอยู่กับเดือนปัจจุบัน สถานการณ์ หากค่าที่ป้อนอยู่นอกช่วง EConvertError จะถูกสร้างขึ้น
กระบวนการถอดรหัสวันที่:
คำจำกัดความ: ขั้นตอน DecodeDate (วันที่: TDateTime; var ปี, เดือน, วัน: Word);
ฟังก์ชัน: ป้อนวันที่ประเภท TDateTime แล้วแปลงเป็นค่าปี เดือน และวัน หากค่าอินพุตเป็น 0 หรือน้อยกว่า 0 ปี เดือน และวันจะเป็น 0 ทั้งหมด
ฟังก์ชัน EncodeTime:
คำจำกัดความ: EncodeTime (ชั่วโมง นาที วินาที MSec: Word): TDateTime;
ฟังก์ชัน: ป้อนค่าชั่วโมง (ชั่วโมง) นาที (นาที) วินาที (วินาที) ไมโครวินาที (MSec) และส่งกลับเวลาประเภท TDateTime ซึ่งเป็นทศนิยมระหว่าง 0 ถึง 1 ช่วงค่าของชั่วโมงคือ 0-23 ช่วงค่าต่ำสุดคือ 0-59 ช่วงค่าของวินาทีคือ 0-59 และช่วงค่าของ MSec คือ 0-999 หากค่าอินพุตเกินช่วง EConvertError ถูกสร้างขึ้นอย่างผิดพลาด
กระบวนการ DecodeTime:
คำจำกัดความ: ขั้นตอน DecodeTime (เวลา: TDateTime; var Hour, Min, Sec, MSec: Word);
ฟังก์ชัน: ป้อนเวลาและแปลงเป็นชั่วโมง นาที วินาที และไมโครวินาที (MSec)
ฟังก์ชันการแปลงประเภท TDateTime และประเภทสตริง:
ฟังก์ชัน DateTimeToStr:
ฟังก์ชัน DateToStr
ฟังก์ชัน TimeToStr
คำจำกัดความ: ฟังก์ชัน DateTimeToStr (DateTime: TDateTime): สตริง;
ฟังก์ชั่น TimeToStr (เวลา: TDateTime): สตริง;
ฟังก์ชั่น TimeToStr (เวลา: TDateTime): สตริง;
ฟังก์ชัน: แปลงหมายเลขประเภท TDateTime เป็นสตริง DateTimeToStr แปลงวันที่และเวลา DateToStr แปลงเฉพาะวันที่ และ TimeToStr แปลงเฉพาะเวลา เอฟเฟกต์เอาต์พุตที่แปลงแล้วคือ YYYY-MD H:M:S
ฟังก์ชัน StrToDateTime
ฟังก์ชัน StrToDate
ฟังก์ชัน StrToTime
คำจำกัดความ: ฟังก์ชัน StrToDateTime (const S: string): TDateTime;
ฟังก์ชั่น StrToDate (const S: สตริง): TDateTime;
ฟังก์ชัน StrToTime (const S: สตริง): TDateTime;
ฟังก์ชัน: แปลงสตริงที่มีรูปแบบวันที่และเวลาเป็น TDateTime โดยที่ S ต้องเป็นสตริงที่ถูกต้อง เช่น
รูปแบบ YY-MM-DD HH:MM:SS มิฉะนั้นเหตุการณ์ EConvertError จะถูกทริกเกอร์และข้อความแสดงข้อผิดพลาดจะได้รับแจ้ง
สตริงของส่วนเวลาจะต้องประกอบด้วยสตริงตัวเลข 2 ถึง 3 ชุด และคั่นด้วยอักขระตัวคั่นที่ตั้งค่าไว้ในการตั้งค่าภูมิภาคของ Windows ข้อกำหนดรูปแบบจะต้องสอดคล้องกับการตั้งค่าในการตั้งค่าภูมิภาคของ Windows โดยที่ HH, MM (ชั่วโมง, นาที) ต้องเพิ่ม SS (วินาที) เป็นทางเลือก คุณสามารถเพิ่ม Am และ Pm ต่อท้ายเพื่อแยกความแตกต่างช่วงเช้าและบ่ายได้ ในเวลานี้ระบบจะคิดว่ามีการใช้การแสดงเวลาแบบ 12 ชั่วโมง ไม่เช่นนั้นจะเป็น ถือว่าใช้การแสดงแบบ 24 ชั่วโมง
รูปแบบของส่วนวันที่จะต้องสอดคล้องกับรูปแบบวันที่แบบสั้นในการตั้งค่าภูมิภาคของ Windows ซึ่งประกอบด้วยสตริงตัวเลข 2 ถึง 3 ตัวด้วย หากสตริงมีเพียง 2 หลัก จะถือว่าเดือนและวันที่เป็น ระบุและปีคือปีปัจจุบัน
หากโลแคลใช้การแสดงปีเป็นตัวเลขสองหลัก ระบบจะจัดการดังนี้:
สำหรับค่าฐานปีที่เริ่มต้นของปีปัจจุบัน ให้ป้อนปี 03 ป้อนปี 50 ป้อนปี 68
1998 0 1900 1903 1950 1968
2002 0 2000 2003 2050 2068
2541 50 2491 2546 2493 2511
2000 50 1950 2003 1950 1968
2545 50 2495 2546 2593 2511
2563 50 1970 2003 2050 2068
2563 10 2553 2103 2050 2068
ขั้นแรก ให้รับปีเริ่มต้นของปีที่มีตัวเลขสองหลักในการตั้งค่าภูมิภาค เช่น หากตั้งค่าช่วงปีที่เป็นตัวเลขสองหลักเป็น 1932-2031 ปีที่เริ่มต้นคือ 32 ปี 0 จะถือเป็นตัวเลขสองหลัก ถ้าปีนั้นมากกว่า 0 จริงๆ จะใช้ค่าของปีปัจจุบันลบด้วยปีเริ่มต้น กว่าหรือเท่ากับค่านี้ให้ถือเป็นศตวรรษนี้ ไม่เช่นนั้น ให้ถือเป็นศตวรรษหน้า ดังตัวอย่างต่อไปนี้
ขั้นตอน DateTimeToString:
ฟังก์ชัน FormatDateTime:
คำจำกัดความ: ขั้นตอน DateTimeToString (ผลลัพธ์ var: string; const รูปแบบ: string; DateTime: TDateTime);
ฟังก์ชั่น FormatDateTime (รูปแบบ const: string; DateTime: TDateTime): string;
ฟังก์ชัน: รับสตริงเวลาที่จะส่งออกโดยกำหนดรูปแบบในสตริงรูปแบบ ตัวอย่างเช่น หากคุณต้องการส่งออก "วันนี้คือวันศุกร์ที่ 5 พฤษภาคม 2002" คุณสามารถใช้ทั้งสองวิธีนี้ได้ ฟังก์ชันหนึ่งได้รับผ่านตัวแปรที่ใช้ร่วมกัน ค่าอื่น ๆ คือการได้รับสตริงเอาต์พุตผ่านค่าที่ส่งคืน พารามิเตอร์ DateTime คือค่าวันที่ที่คุณต้องการส่งออก ธงและสตริงเพิ่มเติม สตริงเพิ่มเติมจะล้อมรอบด้วย "" เช่นเดียวกับฟังก์ชัน Printf ใน C ตัวอย่างเช่น ค่ารูปแบบของ "วันนี้คือวันศุกร์ที่ 5 พฤษภาคม 2002" คือ '" วันนี้คือ "yyyy" ปี "mm" เดือน "dd" day ," dddd', yyyy, mm, dd, dddd ล้วนเป็นตัวระบุรูปแบบ โดยมีคำอธิบายของตัวระบุรูปแบบต่างๆ ดังนี้
d: ใช้จำนวนเต็มหนึ่งหรือสองตัวเพื่อแสดงวัน (1-31)
dd: ใช้จำนวนเต็มสองตัวเพื่อแสดงวัน และใช้ 0 เพื่อสร้างตัวเลขที่น้อยกว่าสองหลัก (01-31)
ddd: แสดงหมายเลขสัปดาห์ปัจจุบันในรูปแบบย่อ หาก Windows เป็นเวอร์ชันภาษาอังกฤษ จะแสดงเป็น จันทร์-อาทิตย์ หากเป็นเวอร์ชันภาษาจีน จะแสดงเป็น dddd
dddd: แสดงหมายเลขสัปดาห์ปัจจุบันในรูปแบบเต็ม หาก Windows เป็นเวอร์ชันภาษาอังกฤษ วันจันทร์-SumDay จะแสดงขึ้น หากเป็นเวอร์ชันภาษาจีน วันจันทร์-วันอาทิตย์ จะปรากฏขึ้น
ddddd : เอาต์พุตในรูปแบบวันที่แบบสั้นในโลแคล
dddddd : เอาต์พุตในรูปแบบวันที่แบบยาวในโลแคล
m: ใช้จำนวนเต็มหนึ่งหรือสองตัวเพื่อแสดงเดือน (1-12)
mm: ใช้จำนวนเต็มสองตัวเพื่อแสดงเดือน หากมีน้อยกว่าสองหลัก ให้ใช้ 0 เพื่อประกอบขึ้น (01-12)
mmm: ใช้ตัวย่อเพื่อแสดงชื่อเดือน เวอร์ชันภาษาอังกฤษแสดงเป็น Jan-Dec และเวอร์ชันภาษาจีนเหมือนกับ mmmm
mmmm: ใช้วิธีแบบเต็มเพื่อแสดงชื่อเดือน เวอร์ชันภาษาอังกฤษแสดงเดือนมกราคม-ธันวาคม และเวอร์ชันภาษาจีนแสดงเดือนมกราคมถึงธันวาคม
yy: แสดงปีเป็นจำนวนเต็มสองหลัก (00-99)
ปปปป: แสดงปีเป็นจำนวนเต็มสี่หลัก (0000-9999)
h: ใช้จำนวนเต็มหนึ่งหรือสองตัวเพื่อแสดงชั่วโมง (0-23)
hh: ใช้จำนวนเต็มสองตัวเพื่อแสดงชั่วโมง หากมีตัวเลขน้อยกว่าสองหลัก ให้ใช้ 0 เพื่อสร้าง (00-23)
n: ใช้จำนวนเต็มหนึ่งหรือสองตัวเพื่อแสดงนาที (0-60)
nn: ใช้จำนวนเต็มสองตัวเพื่อแสดงนาที และใช้ 0 เพื่อประกอบเป็นตัวเลขที่น้อยกว่าสองหลัก (00-60)
s: ใช้จำนวนเต็มหนึ่งหรือสองตัวเพื่อแสดงวินาที (0-60)
ss: ใช้จำนวนเต็มสองตัวเพื่อแสดงวินาที และใช้ 0 เพื่อประกอบเป็นตัวเลขที่น้อยกว่าสองหลัก (00-60)
z: แสดงมิลลิวินาทีด้วยจำนวนเต็มหนึ่งถึงสองตัว (0-999)
zzz: ใช้จำนวนเต็มสามหลักเพื่อแสดงเป็นมิลลิวินาที หากมีน้อยกว่าสามหลัก ให้ใช้ 0 เพื่อประกอบกัน (000-999)
tt : แสดงวันที่ในรูปแบบในภาษาท้องถิ่น
am/pm: ใช้สำหรับแสดงเวลา 12 ชั่วโมง โดย AM แทน 0 ถึง 12 นาฬิกา และ pm แทน 12 ถึง 0 โมงเช้า
ตัวแปรที่เกี่ยวข้องกับเวลา:
Delphi สรุปข้อมูลต่างๆ เกี่ยวกับการตั้งค่าภายในเครื่องและกำหนดชุดของตัวแปร ต่อไปนี้เป็นตัวแปรบางส่วนที่เกี่ยวข้องกับเวลา:
ตัวคั่นวันที่:อักขระ
ตัวคั่นวันที่ ใช้สำหรับแยกปี เดือน และวัน
ตัวคั่นเวลา:อักขระ
เครื่องแยกเวลาใช้แยกชั่วโมง นาที วินาที
ShortDateFormat: สตริง
คำจำกัดความของรูปแบบวันที่แบบสั้นในภาษาท้องถิ่น
LongDateFormat: สตริง
คำจำกัดความของรูปแบบวันที่แบบยาวในภาษาท้องถิ่น
ShortTimeFormat: สตริง
คำจำกัดความของรูปแบบเวลาสั้นในภาษาท้องถิ่น
LongTimeFormat: สตริง
คำจำกัดความของรูปแบบยาวในภาษาท้องถิ่น
เวลา AMString: สตริง
เชือกที่ใช้แทนตอนเช้า
TimePMString: สตริง
สตริงที่ใช้แทนช่วงบ่าย
ShortMonthNames: อาร์เรย์ [1..12] ของสตริง;
อาร์เรย์ที่ใช้ย่อชื่อเดือนคือสตริงที่ระบุด้วย mmm ที่แสดงเมื่อใช้ FormatDateTime
LongMonthNames: อาร์เรย์ [1..12] ของสตริง;
อาร์เรย์ที่ใช้แทนชื่อเดือนโดยสมบูรณ์คือสตริงที่ระบุด้วย mmmm ที่แสดงเมื่อใช้ FormatDateTime
ShortDayNames: อาร์เรย์ [1..7] ของสตริง;
อาร์เรย์ที่ใช้ย่อวันในชื่อสัปดาห์คือสตริงที่ระบุโดย ddd ซึ่งแสดงเมื่อใช้ FormatDateTime
LongDayNames: อาร์เรย์ [1..7] ของสตริง;
อาร์เรย์ที่ใช้เพื่อแสดงชื่อของสัปดาห์โดยสมบูรณ์คือสตริงที่ระบุโดย ddd ซึ่งแสดงเมื่อใช้ FormatDateTime
TwoDigitYearCenturyWindow:Word = 50;
ปีเริ่มต้นเมื่อใช้ปีสองหลัก
เอาล่ะ ตอนนี้ส่วนที่เกี่ยวกับการดำเนินการด้านเวลาใน Delphi เสร็จสิ้นแล้ว ผู้อ่านสามารถตรวจสอบไฟล์วิธีใช้ที่เกี่ยวข้องเพื่อแก้ไขปัญหาที่พวกเขาพบตามความต้องการเมื่อใช้การเขียนโปรแกรมจริง