RecodeDateTime 及其細粒度版本 RecodeYear/Month/Day/Hour/Minute/Second/MilliSecond 返回新 TDateTime,將指定部分替換為新值,其余部分保持不變。TryRecodeDateTime 返回 Boolean 不拋異常。
RecodeDateTime (AValue; Year, Month, Day, Hour, Min, Sec, MSec)
RecodeDate (AValue; Year, Month, Day)
RecodeTime (AValue; Hour, Min, Sec, MSec)
RecodeYear (AValue; Year)
RecodeMonth (AValue; Month)
RecodeDay (AValue; Day)
RecodeHour (AValue; Hour)
RecodeMinute (AValue; Minute)
RecodeSecond (AValue; Second)
RecodeMilliSecond(AValue; MSec)
TryRecodeDateTime(AValue; Year, Month, Day, Hour, Min, Sec, MSec; out ANewValue)
uses DateUtils;
procedure TForm1.FormCreate(Sender: TObject);
const FMT = 'yyyy-m-d h:n:s:z';
var t1, t2: TDateTime;
begin
t1 := EncodeDateTime(2001, 1, 1, 1, 1, 1, 1);
t2 := RecodeDateTime(t1, 2009, 5, 21, 11, 22, 33, 999); ShowMessage(FormatDateTime(FMT, t2)); {2009-5-21 11:22:33:999}
t2 := RecodeDate(t1, 2009, 5, 21); ShowMessage(FormatDateTime(FMT, t2)); {2009-5-21 1:1:1:1}
t2 := RecodeTime(t1, 11, 22, 33, 999); ShowMessage(FormatDateTime(FMT, t2)); {2001-1-1 11:22:33:999}
t2 := RecodeYear(t1, 2009); ShowMessage(FormatDateTime(FMT, t2)); {2009-1-1 1:1:1:1}
t2 := RecodeMonth(t1, 5); ShowMessage(FormatDateTime(FMT, t2)); {2001-5-1 1:1:1:1}
t2 := RecodeDay(t1, 21); ShowMessage(FormatDateTime(FMT, t2)); {2001-1-21 1:1:1:1}
t2 := RecodeHour(t1, 11); ShowMessage(FormatDateTime(FMT, t2)); {2001-1-1 11:1:1:1}
t2 := RecodeMinute(t1, 22); ShowMessage(FormatDateTime(FMT, t2)); {2001-1-1 1:22:1:1}
t2 := RecodeSecond(t1, 33); ShowMessage(FormatDateTime(FMT, t2)); {2001-1-1 1:1:33:1}
t2 := RecodeMilliSecond(t1, 999); ShowMessage(FormatDateTime(FMT, t2)); {2001-1-1 1:1:1:999}
if TryRecodeDateTime(t1, 2009, 5, 21, 11, 22, 33, 999, t2) then
ShowMessage(FormatDateTime(FMT, t2));
end;
應用場景: 將用戶輸入的部分日期時間合併(如日期選擇器 + 時間選擇器)、定時任務調整觸發時刻、數據清洗統一時間精度。