DateUtils 單元提供了極其豐富的時間分量提取函數,能將任意 TDateTime 拆解為年、月、週、日、時、分、秒、毫秒等多維度的相對位置。這對於日曆顯示、排程計算、統計分組等場景至關重要。
每個層級都提供五個維度的「第幾個」查詢:
uses DateUtils;
procedure TForm1.FormCreate(Sender: TObject);
var
t: TDateTime;
w: Word;
c: Cardinal;
i: Int64;
begin
t := StrToDateTime('2024-05-20 11:22:33');
// 日期層級
w := MonthOfTheYear(t); // 5
w := WeekOfTheYear(t); // 21
w := WeekOfTheMonth(t); // 3
w := NthDayOfWeek(t); // 3
w := DayOfTheYear(t); // 141
w := DayOfTheMonth(t); // 20
w := DayOfTheWeek(t); // 2 (週一)
w := SysUtils.DayOfWeek(t); // 2 (週一)
// 小時層級
w := HourOfTheYear(t); // 3347
w := HourOfTheMonth(t); // 467
w := HourOfTheWeek(t); // 59
w := HourOfTheDay(t); // 11
// 分鐘層級
c := MinuteOfTheYear(t); // 200842
w := MinuteOfTheMonth(t); // 28042
w := MinuteOfTheWeek(t); // 3562
w := MinuteOfTheDay(t); // 682
w := MinuteOfTheHour(t); // 22
// 秒層級
c := SecondOfTheYear(t); // 12050553
c := SecondOfTheMonth(t); // 1682553
c := SecondOfTheWeek(t); // 213753
c := SecondOfTheDay(t); // 40953
w := SecondOfTheHour(t); // 1353
w := SecondOfTheMinute(t); // 33
// 毫秒層級
i := MilliSecondOfTheYear(t); // 12050553000
c := MilliSecondOfTheMonth(t); // 1682553000
c := MilliSecondOfTheWeek(t); // 213753000
c := MilliSecondOfTheDay(t); // 40953000
c := MilliSecondOfTheHour(t); // 1353000
c := MilliSecondOfTheMinute(t); // 33000
w := MilliSecondOfTheSecond(t); // 0
end;
| 函數前綴 | 返回類型 | 適用範圍 |
|---|---|---|
| DayOf... / WeekOf... / MonthOf... / HourOf... / MinuteOf... (Day/Hour) | Word (16-bit) | 最大值 < 65535 |
| MinuteOf... (Year/Month/Week) / SecondOf... / MilliSecondOf... | Cardinal / Int64 | 大數值需 32/64 位 |
DayOfTheWeek 決定起始欄位,WeekOfTheMonth 決定行數WeekOfTheYear 做週報,MonthOfTheYear 做月報HourOfTheDay、MinuteOfTheHour 精確匹配執行時間MilliSecondOfTheSecond 計算耗時掌握這套函數體系,能讓時間維度的業務邏輯表達更直觀、代碼更簡潔,避免手動計算帶來的邊界錯誤。