من این تابع را نوشتم که خیلی سریع و دقیق تاریخ میلادی را به شمسی تبدیل می کند
function MiladiToShamsi(N:tdate):string;
const
W : array[1..7] of widestring = ('یکشنبه','دوشنبه','سه شنبه','چهارشنبه','پنجشنبه','ج عه','شنبه');
Mon : array[1..12] of widestring = ('فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');
var
days,Y,D,M:integer;
begin
days:= DaysBetween(N,EncodeDate(1900,1,1));
days :=days + 2112;
Y := 1273;
M := 0;
D := 0;
Y := Y + Trunc(days / 12053) * 33;
days := days mod 12053;
Y := Y + Trunc(days / 1461) * 4;
days := days mod 1461;
if (days = 1460)then
begin
Y := Y + 3;
days := 365;
end
else
begin
Y := Y + Trunc(days / 365);
days := days mod 365;
end;
if (days < 186)then
begin
M := Trunc(days / 31) + 1;
D := days mod 31 + 1;
end
else
begin
M := Trunc((days - 186) / 30) + 7;
D := (days - 186) mod 30 + 1;
end;
result:= inttostr(Y)+' ' + Mon[M] + ' ' + Inttostr(D)+ ' ' + W[DayOfWeek(N)];
end;
طریقه استفاده:
Label1.caption:=MiladiToShamsi(date);