Thử sử dụng hàm EncodeDateTime được khai báo trong đơn vị DateUtils.
function EncodeDateTime(const AYear: Word;
const AMonth: Word;
const ADay: Word;
const AHour: Word;
const AMinute: Word;
const ASecond: Word;
const AMilliSecond: Word): TDateTime;
Xem ví dụ này
uses
DateUtils;
var
myDateTime : TDateTime;
begin
//Your Code
myDateTime := EncodeDateTime(2009, 11, 28, 14, 23, 12, 000);
//Your Code
End;
Một tùy chọn khác
uses
SysUtils;
var
myDateTime : TDateTime;
begin
//Your Code
myDateTime:= EncodeDate(2009,11,28)+EncodeTime(14,23,12,000);
//Your Code
end;
Lựa chọn thứ hai làm việc vì TDatetime Nó được lưu giữ như một đôi (TDateTime = type Double;
), với ngày như phần tách rời (hàm EncodeDate trả về tích phân) và thời gian là phần phân đoạn.
Phần ngày của TDateTime đại diện cho số ngày đã trôi qua kể từ ngày 12/30/1899. TDateTime có thể là bất kỳ ngày nào qua ngày 31 tháng 12 năm 9999 (giá trị thập phân 2,958,465), giá trị TDateTime cũng có thể âm. Giá trị thập phân -693.593 tương ứng với 1 tháng 1 0001.
thấy đề tài ví dụ
var
myDateTime : TDateTime;
Begin
myDateTime :=0; //represents 12/30/1899
myDateTime :=1; //represents 12/31/1899
myDateTime :=-1; //represents 12/29/1899
myDateTime :=-693593; //represents 01/01/0001
myDateTime := Now(); //assign the current date and time to myDateTime
myDateTime:=Trunc(Now()); //Extract only the date part.
myDateTime:=Frac(Now()); //Extract only the time part.
myDateTime :=Now() + 1;// Add a day to the current datetime
End;
Quan trọng Lưu ý từ trang web của Embarcadero:
Để tìm số phân đoạn của ngày giữa hai ngày , chỉ cần trừ hai giá trị, trừ khi một trong các giá trị System.TDateTime là số âm. Tương tự, để tăng ngày và giá trị thời gian theo một số phân đoạn nhất định số ngày, hãy thêm số phân đoạn phân đoạn vào giá trị ngày và giờ nếu giá trị System.TDateTime là .
Khi làm việc với tiêu cực Hệ thống.Giá trị thời gian, tính toán phải xử lý phần thời gian riêng biệt. Phần phân số phản ánh phần của một ngày 24 giờ mà không cần liên quan đến dấu hiệu của giá trị System.TDateTime. Ví dụ: 6:00 sáng ngày 12/29/1899 là –1,25, không phải -0,25, sẽ là -0,75. Không có giá trị System.TDateTime nào giữa –1 và 0.
để biết thông tin addtional bạn có thể thấy liên kết này
tôi sẽ bỏ phiếu này lên nếu bạn giải thích lý do tại sao * * sự tùy chọn thứ hai hoạt động và tại sao nó là an toàn để làm điều đó như thế này. Nếu OP biết rằng anh sẽ không cần phải hỏi. Để trích dẫn Raymond Chen: "Nếu bạn không hiểu tại sao phải làm một việc gì đó, thì bạn đã rơi vào cái bẫy của chương trình giáo phái hàng hóa" (http://blogs.msdn.com/oldnewthing/archive/2009/11/ 04/9917052.aspx) – mghie
Tùy chọn thứ hai không hoạt động và không an toàn :-) Nó * sẽ * hoạt động vào ngày * sau * 12/30/1899, nhưng không vào ngày trước ngày đó (ngày mã hóa thành số âm phủ định) –
+1 câu trả lời tuyệt vời và chi tiết – jpfollenius