PDA

View Full Version : تفاضل دو فیلد از نوع data/time



rostamedastan
چهارشنبه 07 اردیبهشت 1384, 10:50 صبح
بسم الله الرحمن الرحیم
من دو فیلد از نوعdata/time در جدول اکسس دارم .میخواهم این دو فیلد را که حاوی ساعت است را از هم کم کنم. روش کار را توضیح دهید.
در ضمن اگر بخواهم آن دو را در متغیری بریزم وسپس از هم کم کنم آن دو متغیر را باید از چه نوعی تعریف کنم؟
متشکرم

Touska
چهارشنبه 07 اردیبهشت 1384, 15:56 عصر
کاری نداره که اگر String هستند تبدیل کن به نوع Date و Time و از هم کم کن.

برای مثال :


Time - StrToTime('01:00:00');

که Time را از آن یک ساعت کم می کند.

موفق باشید.

:flower:

parhizkar2000
چهارشنبه 07 اردیبهشت 1384, 23:13 عصر
حالا من به یه مشکل کوچیک تو جمع یک تاریخ رسیدم بدین صورت که خط زیر رو تو برنامه دارم که تاریخ یک روز رو 6 ماه بهش اضافه می کنم
s:=datetostr(strtodate(sal+'/'+mah+'/'+roz)+180);
درست کار می کنه اما وقتی به تاریخ 30/02/84 میرسه میگه که این تاریخ قابل قبول نیست.
بنظر شما اشکال کجاست.
البته اول برنامه تاریخ رو به فرمتyy/mm/ddدر آوردم

vcldeveloper
پنج شنبه 08 اردیبهشت 1384, 02:06 صبح
درست کار می کنه اما وقتی به تاریخ 30/02/84 میرسه میگه که این تاریخ قابل قبول نیست.
شما تاریخ شمسی رو در نوع DateTime ،که از تاریخ میلادی پشتیبانی میکنه، ذخیره کردید؟!!!!!!!
دوست عزیز، ماه دوم میلادی (فوریه) 28 روزه هست و شما نمی تونید تاریخ میلادی بصورت فوق داشته باشید.
احتمالا به زودی با مشکلات دیگه ایی هم مواجه خواهید شد.
بهتر هست که به فکر تغییر فرمت فیلدهای مورد نظر باشید.

Touska
پنج شنبه 08 اردیبهشت 1384, 08:06 صبح
از کامپوننت های شمسی استفاده کنید. مثل Falad

و برای تهیه به آقای کرامتی مراجعه کنید.

موفق باشید :flower:

parhizkar2000
پنج شنبه 08 اردیبهشت 1384, 23:24 عصر
حالا من خودم یه تابع نوشتم بصورت زیر و صحیح هم کار می کنه بنظر شما چطوره؟


Function Tmain.addtar(tar,ad:string):string;
var
ro,ma,sa: integer;
r,m,s: string;
begin
ro:=strtoint(copy(tar,7,2));
ma:=strtoint(copy(tar,4,2));
sa:=strtoint(copy(tar,1,2));
ro:=ro+strtoint(ad);
while ro > 30 do
begin
ro:=ro-30 ;
ma:=ma+1 ;
end;
while ma > 12 do
begin
ma:=ma-12;
sa:=sa+1;
end;
if ro<10 then
r:='0'+inttostr(ro)
else
r:=inttostr(ro);
if ma <10 then
m:='0'+inttostr(ma)
else
m:=inttostr(ma);
s:=inttostr(sa);
addtar:=s+'/'+m+'/'+r;
end;

vcldeveloper
جمعه 09 اردیبهشت 1384, 01:55 صبح
جناب آقای کامبیز خجسته در سایتشون یک یونیت مجانی برای تبدیلات تاریخ میلادی به شمسی و بالعکس دارند، می تونید از اون استفاده کنید:
http://www.delphiarea.com/

parhizkar2000
جمعه 09 اردیبهشت 1384, 13:03 عصر
برای تبدیلات تاریخ میلادی به شمسی و بالعکس دارند،
مسله این نیست مسله اینست چطور به یک تاریخ شمسی مقدار روز مشخصی را اضافه یا کم کنیم.

net_ved
جمعه 09 اردیبهشت 1384, 16:33 عصر
ببین مهندس جان من واسه اینکه با این مشکل تا حالا کلی دستو پنجه نرم کردم به شما پیشنهاد می کنم که اولا تاریخو تو یه فیلدی از نوع string نگه داری کن...اینجوری کلی از مشکلا تت حل می شه ....هر وقت خواستی استفاده کنی از strtodate استفاده کن...برای اضافه کردن روز هم باید یه مقدار از نوع date با مقداری از نوع int جمع کرد...برایی مثال این خط دقیقا از برنامه خودم کپی شده که خیلیم خوب کار میکنه

DataModule3.Table3.FieldValues['date']:=strtodate( suiEdit2.Text)+strtoint(suiNumberEdit1.Text);
البته من تاریخ به صورت کامل وارد میکنم..1364/02/20
برای مثال: 1384/02/09+500=1385/06/23
فکر کنم درست باشه :oops:

vcldeveloper
شنبه 10 اردیبهشت 1384, 02:07 صبح
مسله این نیست مسله اینست چطور به یک تاریخ شمسی مقدار روز مشخصی را اضافه یا کم کنیم.
شما می تونستید ابتدا تاریخ شمسی رو به میلادی تبدیل کرده و سپس تاریخ میلادی رو به راحتی با هر عددی جمع کنید.

parhizkar2000
شنبه 10 اردیبهشت 1384, 23:36 عصر
شما می تونستید ابتدا تاریخ شمسی رو به میلادی تبدیل کرده و سپس تاریخ میلادی رو به راحتی با هر عددی جمع کنید.

1- آیا بعد از تبدیل دوباره تاریخ میلادی به شمی روز درست رو بر می گردونه؟
2- برای تعداد رکورد بالا میدونید چقدر زمان برای پردازش زیاد میشه؟

vcldeveloper
دوشنبه 12 اردیبهشت 1384, 01:43 صبح
آیا بعد از تبدیل دوباره تاریخ میلادی به شمی روز درست رو بر می گردونه؟
بستگی به این داره که چطوری تاریخ رو تبدیل کنید. اگر منظورتون اون یونیتی هست که من اشاره کردم، بله درست تبدیل می کنه.


برای تعداد رکورد بالا میدونید چقدر زمان برای پردازش زیاد میشه؟
این بستگی به عوامل مختلفی داره، مثل مکان سرور، تعداد رکوردها، تعداد فیلدهای تاریخ، نوع ارتباط با سرور و ...