Като общо правило, не третирайте стойностите на TDateTime като низове, а като дати и часове.
Не получавайте стойността на поле за дата/час с метода AsString, използвайте метода AsDateTime и го присвоете на променлива TDateTime.
Ако искате да знаете частите от датата, използвайте предоставените функции, за да го направите. Например наличните в DateUtils мерна единица. SysUtils модулът също така съдържа някои функции, свързани с дата/час.
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]);
Същото важи и за съхраняване на стойности в базата данни, вместо да използвате фиксиран формат на дата, използвайте параметри като това:
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();
Работи с всички налични слоеве за достъп до бази данни, за които знам.