Theo nguyên tắc chung, không coi các giá trị TDateTime là chuỗi mà là ngày và giờ.
Không nhận giá trị của trường Ngày / Giờ bằng phương thức AsString, hãy sử dụng phương thức AsDateTime và gán nó cho biến TDateTime.
Nếu bạn muốn biết các phần ngày tháng, hãy sử dụng các chức năng được cung cấp để làm điều đó. Ví dụ:những cái có sẵn trong DateUtils đơn vị. SysUtils đơn vị cũng chứa một số chức năng liên quan đến Ngày / Giờ.
uses
DateUtils, SysUtils;
var
MyDate: TDateTime;
MyDay, MyMonth, MyYear: Word;
begin
MyDate := MyQuery.Fields[3].AsDateTime; //not AsString
MyDay := DayOf(MyDate);
MyMonth := MonthOf(MyDate);
MyYear := YearOf(MyDate);
ShowMessage(Format('Day: %d, Month: %d, Year: %d', [MyDay, MyMonth, MyYear]);
//or also
MyDate := EndOfTheMonth(MyDate);
DecodeDate(MyDate, MyYear, MyMonth, MyDay);
ShowMessage(Format('Day: %d, Month: %d, Year: %d', [MyDay, MyMonth, MyYear]);
Điều tương tự cũng áp dụng cho việc lưu trữ các giá trị vào cơ sở dữ liệu, thay vì sử dụng định dạng ngày cố định, hãy sử dụng các tham số như sau:
uses
DateUtils, SysUtils;
var
MyDate: TDateTime;
MyDay, MyMonth, MyYear: Word;
begin
MyDate := EncodeDate(2013, 2, 17);
MyQuery.SQL.Text := 'insert into myTable (MyDate) values (:MyDate)';
MyQuery.Params.ParamByName('MyDate').AsDateTime := MyDate;
MyQuery.ExecSQL();
Nó hoạt động với tất cả các lớp truy cập cơ sở dữ liệu có sẵn mà tôi biết.