Delphi 提供兩組構建日期時間的函數:SysUtils 基礎版與 DateUtils 進階版(支援年/周/日序數)。Try 版本返回 Boolean 不拋異常,適合用戶輸入驗證。
| 單元 | 函數 | 說明 |
|---|---|---|
| SysUtils | EncodeDateTime | 年月日時分秒毫秒 → TDateTime |
| EncodeDate | 年月日 → TDateTime (時間歸零) | |
| EncodeTime | 時分秒毫秒 → TDateTime (日期歸零) | |
| DateUtils | EncodeDateDay | 年 + 年內天序數 → TDateTime |
| EncodeDateWeek | 年 + 周序數 [+ 周內天] → TDateTime | |
| EncodeDateMonthWeek | 年 + 月 + 月內周序數 + 周內天 → TDateTime | |
| EncodeDayOfWeekInMonth | 年 + 月 + 月內周序數 + 周內天 → TDateTime | |
| TryEncodeDateTime | 安全版 EncodeDateTime,參數無效返回 False | |
| TryEncodeDateDay/Week/MonthWeek/DayOfWeekInMonth | 對應安全版 |
uses DateUtils;
procedure TForm1.FormCreate(Sender: TObject);
var t: TDateTime; s: string;
begin
t := EncodeDateTime(2009, 5, 20, 11, 22, 33, 999);
s := FormatDateTime('yyyy-m-d h:n:s:zzz', t); {2009-5-20 11:22:33:999}
t := EncodeDate(2009, 5, 20);
s := FormatDateTime('yyyy-m-d h:n:s:zzz', t); {2009-5-20 0:0:0:000}
t := EncodeTime(11, 22, 33, 999);
s := FormatDateTime('h:n:s:zzz', t); {11:22:33:999}
t := EncodeDateDay(2009, 140); {2009-5-20}
t := EncodeDateWeek(2009, 21); {2009-5-18 周一}
t := EncodeDateWeek(2009, 21, 3); {2009-5-20 周三}
t := EncodeDateMonthWeek(2009, 5, 3, 3); {2009-5-20}
t := EncodeDayOfWeekInMonth(2009, 5, 3, 3); {2009-5-20}
if TryEncodeDateTime(2009, 5, 20, 11, 22, 33, 999, t) then
s := FormatDateTime('yyyy-m-d h:n:s:zzz', t);
{其餘 Try 版本類似}
end;
應用場景: 日曆控件數據綁定、定時任務觸發時間計算、業務邏輯中的日期推算(如「每月第 3 個周三」)。