مشاهده نسخه کامل
: تاریخ شمسی
دوستان عزیز
اگر کسی از تاریخ شمسی در برنامه هاش استفاده کرده بشکلی که امکان جستجو بین دو تاریخ امکان پذیر باشد بایک مثال یا یک نمونه برنامه کوچک توضیح بده خیلی ممنون می شم
MasterData
22-01-2007, 20:57
اگه براي ثبت تاريخ در ديتابيس ميخواي استفاده كني چند راه وجود داره
1- ثبت تاريخ به صورت رشته اي يعني رشته مثلا 01/01/1385 رو ذخيره كني . فكر نمي كنم توي مقايسه ها و جستجو به مشكلي بر بخوري
2- ثبت تاريخ به صورت ميلادي و تبديل اون به شمسي در برنامه كه اصولا هيچ مشكلي نداشته بشي
3- ثبت تاريخ به صورت عدد مثلا تاريخ 01/01/1385 رو به صورت عدد 13850101 ذخيره كني
بستگي به انتحاب بايد اعمال كاري خودت رو پياده سازي كني
soltanmahdi
22-01-2007, 21:01
با سلان خدمت دوستان.
می شه دقیقا بگی که می خواهی چی کار کنی. من با تاریخ شمسی کار کرده ام. اگه بگی دقیقا چی می خواهی شاید بتونم کمکت کنم.
من می خوام یک برنامه ثبت نامه های اداری درست کنم کهبشه نامه ها را با تاریخ در ان وارد کرد وبعد بشه نامه های مربوط به یک بازه زمانی خاص را جستجو کرد ضمنا شنیدم با استفاده از تابع shamsi .dll خیلی راحت میشه اینکار را انجام داد ولی چطوریش را نمی دونم
soltanmahdi
22-01-2007, 23:21
با سلام خدمت دوستان.
دوست عزیز من نیم دونم که زیربرنامه شما تاریخ رو به چه صورتی بر می گردانه و ل یهر چی که باشه جستجو و Query بین تاریخ مثل بقیه چیز ها ست. توی بانک اطلاعاتی اگه به صورت رشته تاریخ را ذخیره کرده باشید کارتون مشخصه. من نمی دونم که مشکل شما چیه؟
ممنون سلطان
شما با تابع shamsi.dll کار کردی؟
سلام
دوست عزیز در همین فروم راهنمای استفاده از shamsi.dll هست یه نگاه بندازی کارت راه میفته
یا علی
soltanmahdi
23-01-2007, 15:48
با سلام خدمت دوستان.
نه دوست عزیز من از procedure دیگری استفاده می کنم. البته مشکلش اینجا است که یک روز کمتر از رو واقعی رو بر می گرداند.
:tongue:
سلام soltanmahdi عزیز
اولا خوشبحالت که همسایه به این خوبی داری دوما اگه بخوای تاریخ جاری سیستم را بصورت شمسی روی فرمت نشون بدی چکار می کنی
F A R H A D
23-01-2007, 20:25
سلام soltanmahdi عزیز
اولا خوشبحالت که همسایه به این خوبی داری دوما اگه بخوای تاریخ جاری سیستم را بصورت شمسی روی فرمت نشون بدی چکار می کنی
یه نگاه به این لینک بنداز:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
soltanmahdi
23-01-2007, 21:43
با سلام خدمت دوستان.
ببین دوست عزیز تابعی که برای من این کار را می کنه خروجیش از نوع string خوب خیلی راحت من هم در هنگام فراخوانی تابع اونو مساوی با یک متغیر از نوع string قرار می دهم و بر روی فرم نمایش می دهم.
می شه لطف کنی و بگی از چه تابعی استفاده می کنی
soltanmahdi
24-01-2007, 07:18
با سلام خدمت دوستان.
ببخشید چون account سایتی که آپلود می کردم پاک شده همین جا می نویسم
function changedate():string;
const
shamsi:array[0..11] of Integer=(0,31,62,93,124,155,186,216,246,276,306,33 6); {ÌÏæá ÔãÓí}
miladi:array[0..11] of integer=(0,31,59,90,120,151,181,212,243,273,304,33 4); {ÌÏæá ãíáÇÏí ÚÇÏí}
miladicab:array[0..11] of integer=(0,31,60,91,121,152,182,213,244,274,305,33 5); {ãíáÇÏí ÚÇÏí ˜ÈíÓå}
var
cabise:array[0..19] of integer; {ÓÇá åÇí ˜ÈíÓå}
ezafe,baghi,res,i,sals,salm,mahm,mahs,roozm,roozs, majrooz:integer;
boolcabisemi,boolcabisesh:boolean;
s,s1,s2:string;
begin
cabise[0]:=2000;
cabise[1]:=2004;
cabise[2]:=2008;
S:=DateToStr(date);
while Pos('/', S) > 0 do
S[Pos('/', S)] := '0';
salm:=(StrToInt64(s) div 1000000);
baghi:=strtoint64(s) mod 100000;
mahm:=baghi div 1000;
roozm:=(baghi mod 100);
ezafe:=0;
boolcabisemi:=false;
boolcabisesh:=false;
for i:=0 to 19 do
if salm=cabise[i] then
begin
boolcabisemi:=true;
break;
end;
if boolcabisemi then
begin
majrooz:=miladicab[mahm-1]+roozm;
res:=80-majrooz;
if res<=0 then
res:=-(res)
else res:=365-res;
for i:=11 downto 0 do
if res>=shamsi[i] then
begin
mahs:=i+1;
roozs:=res-shamsi[i];
break;
end;
end
else
begin
majrooz:=miladi[mahm-1]+roozm;
res:=80-majrooz;
if res<=0 then
res:=-(res)
else res:=365-res;
for i:=11 downto 0 do
if res>=shamsi[i] then
begin
mahs:=i+1;
roozs:=res-shamsi[i];
Break;
end;
end;
if 80-majrooz>=1 then
sals:=salm-622
else
sals:=salm-621;
i:=sals-1383;
if (i mod 4)=0 then
boolcabisesh:=true;
if (boolcabisemi) and (boolcabisesh) then
ezafe:=0
else
ezafe:=1;
if (boolcabisesh) then
ezafe:=ezafe+1;
if (boolcabisesh) and not(boolcabisemi) then
if roozs=29 then
begin
roozs:=-1;
mahs:=mahs+1;
end;
roozs:=roozs+ezafe;
if roozs<10 then
s1:='0'+IntToStr(roozs)
else
s1:=IntToStr(roozs);
if mahs<10 then
s2:='0'+IntToStr(mahs)
else
s2:=IntToStr(mahs);
s:=IntToStr(sals)+'/'+s2+'/'+s1;
changedate:=s;
end;
امید وارم که استفاده کنی.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.