نصب زبان فارسي و يونيكد اون- تبديل تاريخ ميلادي به شمسي
دوستان سلام من خوام برنامه اي بنويسم كه يونيكد فارسي و زبان فارسي روي كامپيوتر كاربر نصب كنه.توي انجمن جستجو كردم و توي يكي از تاپيكها در اين مورد سورسي گذاشته شده بود. ولي متأسفانه چون اين تاپيك قديمي بود لينكاي دانلود هيچكدوم كار نمي كردن.حالا اگه كسي از عزيزان مي تونه بگه من براي اين كه اين كار رو انجام بدم بايد چيكار كنم ممنون مي شم؟
راستي يه سوال ديگه هم داشتم كه ديگه تو تاپيك جديد قرارش نمي دم. همينجا مي پرسمش:
مي خوام تاريخ ميلادي رو به فارسي برگردونم. اونم بدون استفاده از كامپوننتهاي اضافي. توي انجمن سرچ كردم، دوستان چند تا كامپوننت معرفي كرده بودن. راستش نمي خوام خيلي در برنامم از كامپوننت نوشته شده توسط ديگران استفاده كنم. كسي مي تونه الگوريتمش رو به من بگه؟ ممنون مي شوم.موفق باشينباي
مبدل تاريخ ميلادي به شمسي
با سلام;
اميدوارم كه اين كد بتونه كمكت كنه:
پارامترهاي ورودي تابع، سال - ماه - روز ميلادي ميباشد كه پس از فراخواني تابع، مقدار سال - ماه - روز ورودي تبديل به مقادير شمسي معادل ميشوند.
procedure ML_to_SH(var Year, Month, Day: Word);
const
count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
day_year: 0..366;
i: 1..11;
MLeap: Boolean;
begin
if ((Year mod 4) = 0) and (((Year mod 100) <> 0) or ((Year mod 400) = 0)) then
MLeap:= True
else
MLeap:= False;
day_year:= 0;
for i:= 1 to month - 1 do
day_year:= day_year + count_days[i];
day_year:= day_year + day;
if MLeap and (month > 2) then
Inc(day_year);
if (day_year <= 79) then
begin
if (((Year - 1) mod 4) = 0) and ((((Year - 1) mod 100) <> 0) or (((Year - 1) mod 400) = 0)) then
day_year:= day_year + 11
else
day_year:= day_year + 10;
Year:= Year - 622;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 9;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 10;
Day:= day_year mod 30;
end;
end
else
begin
year:= year - 621;
day_year:= day_year - 79;
if (day_year <= 186) then
begin
if (day_year mod 31 = 0) then
begin
Month:= (day_year div 31);
Day:= 31;
end
else
begin
Month:= (day_year div 31) + 1;
Day:= day_year mod 31;
end;
end
else
begin
day_year:= day_year - 186;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 6;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 7;
Day:= day_year mod 30;
end;
end;
end;
end;
end.