PDA

View Full Version : محاسبه زمان بین دو تاریخ



webnama
دوشنبه 15 خرداد 1391, 01:22 صبح
سلام

چطوری میتونیم مدت زمان بین دو تاریخ شمسی را محاسبه کنیم

مثلا : تاریخ شروع :‌ 1365/02/12 تا تاریخ 1391/03/15 را میخواهیم بدونیم چند سال و روز و ماه گذشته است
من روش های مختلفی رو تست کردم اما به نتیجه نرسیدم دوستان لطفا راهنمایی کنید

با تشکر .

samadblaj
دوشنبه 15 خرداد 1391, 02:07 صبح
سلام این تابع خود مایکرو سافت هستش :


System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
MessageBox.Show(pc.GetYear(DateTime.Now)+"/"+pc.GetMonth(DateTime.Now)+"/"+pc.GetDayOfMonth(DateTime.Now));


روشی که من بهتون پیشنهاد میکنم میتونید توی پایگاه داده فیلد رو از نوع int بگیرید و تاریخ رو بدون اسلش ( / ) ذخیره کنید (به این شکل : 12/05/1387 رو به این شکل 13870512 وارد کنید) و هنگام فراخوانی از پایگاه این ها اسلش ها رو جایگزین کنید./
بعد میتونی محاسبات رو انجام بدی مثال : (Date > 13870512) && (Date < 13870512) و . . .

نکته : فقط باید به این نکته توجه کنید که قبل از اعداد یک رقمی یک صفر اضاف کنید تا مشکلی پیش نیاد.

موفق باشید

Miladkt.S.A.o
دوشنبه 15 خرداد 1391, 02:16 صبح
سلام دوست عزیز
این یک راه ساده است البته به نظر من
دو تاریخ را روی دو string
جداگانه بریز
سپس با تابع زیر این string ها را روی دو تا ارایه میریزی

string[] date1 = S1.Split(' ');

با کد بالا تاریخ اول را که در رشته ای با نام S1 قرار داده بودی در ارایه date1 قرار داده شد

string[] date2= S2Split(' ');

با کد بالا تاریخ دوم را که در رشته ای با نام S2 قرار داده بودی در ارایه date2 قرار داده شد

اکنون کافی است 6 عدد درست کنی که در هرکدام یک قسمت از ارایه های بالا ریخته شود برای مثال:

int year1=int.Parse(date1[1]);
int year2=int.Parse(date2[1]);
با کد بالا دو سال را در دو int با نام های year1 و year2 قرار می دهیم
برای روز و ماه هم به همین صورت است
یعنی:

int month1=int.Parse(date1[2]);
int month2=int.Parse(date2[2]);
int day1=int.Parse(date1[3]);
int day2=int.Parse(date2[3]);

و بعد هم کافیه عدد های روز و ماه و سال را از هم کم کرده و نشان دهید.:متفکر:

موفق باشید

webnama
دوشنبه 15 خرداد 1391, 02:26 صبح
سلام دوست عزیز
این یک راه ساده است البته به نظر من
دو تاریخ را روی دو string
جداگانه بریز
سپس با تابع زیر این string ها را روی دو تا ارایه میریزی

string[] date1 = S1.Split(' ');

با کد بالا تاریخ اول را که در رشته ای با نام S1 قرار داده بودی در ارایه date1 قرار داده شد

string[] date2= S2Split(' ');

با کد بالا تاریخ دوم را که در رشته ای با نام S2 قرار داده بودی در ارایه date2 قرار داده شد

اکنون کافی است 6 عدد درست کنی که در هرکدام یک قسمت از ارایه های بالا ریخته شود برای مثال:

int year1=int.Parse(date1[1]);
int year2=int.Parse(date2[1]);
با کد بالا دو سال را در دو int با نام های year1 و year2 قرار می دهیم
برای روز و ماه هم به همین صورت است
یعنی:

int month1=int.Parse(date1[2]);
int month2=int.Parse(date2[2]);
int day1=int.Parse(date1[3]);
int day2=int.Parse(date2[3]);

و بعد هم کافیه عدد های روز و ماه و سال را از هم کم کرده و نشان دهید.:متفکر:

موفق باشید
سلام
دوستان ممنونم
میشه کدها رو کامل بنویسید ؟

samadblaj
دوشنبه 15 خرداد 1391, 11:41 صبح
لطفا اگه میشه در قالب پروژه توضیحش بده ، متوجه نشدم.

webnama
دوشنبه 15 خرداد 1391, 13:18 عصر
دوستان نمونه پروژه یا کدی در این زمینه ندارید ؟؟؟

dana65
یک شنبه 28 خرداد 1391, 19:40 عصر
سلام دوستان
آقا منم یه همچین مشکلی داشتم و البته الان یه مشکل جدید دارم با این موضوع نمیدونم چه طوری رفعش کنم کسی راهنمایی کنه ممنون میشم.
برای محاسبه ی مدت زمان بین دو تاریخ من دو تا متغییر برای شروع و پایان در نظر گرفتم از نوع nvarchar در دیتابیس تاریخ رو به شمسی ذخیره کردم حالا طبق این کد عمل کردم:

string time1 = DataManagement.DT.Rows[0]["timein"].ToString ();
string time2 = DataManagement.DT.Rows[0]["timeout"].ToString();

DateTime inpu = Convert .ToDateTime (time1 );
DateTime outpu = Convert.ToDateTime(time2);

TimeSpan mydifference = outpu - inpu ;
int totaldays = mydifference.Days;
double totalhours = mydifference.Hours;
int totalminutes = mydifference.Minutes;

اینجا مشکل اینجاست که تعداد روزها رو بهم نمیده و نمیدونم چرا احتمال میدم به خاطر این شمسی و میلادی بودنش باشه اگه دوستان کمک کنن ممنون میشم.

mousa1992
یک شنبه 28 خرداد 1391, 20:38 عصر
سلام

DateTime date1 = new DateTime(2012, 06, 01);
DateTime date2 = DateTime.Now;
TimeSpan ts = date2 - date1;
label1.Text = ts.Days.ToString();

کاملا جواب میده و هیچ مشکلی نداره !!
بهتره تاریخ رو به صورت میلادی تو دیتابیس ذخیره کنید و تمام عملیات های مورد نظرتون رو به راحتی روش انجام میدید و برای نمایش کافیه تابعی نوشته و تبدیل کنید به شمسی
موفق باشید

dana65
یک شنبه 28 خرداد 1391, 20:46 عصر
سلام

DateTime date1 = new DateTime(2012, 06, 01);
DateTime date2 = DateTime.Now;
TimeSpan ts = date2 - date1;
label1.Text = ts.Days.ToString();

کاملا جواب میده و هیچ مشکلی نداره !!
بهتره تاریخ رو به صورت میلادی تو دیتابیس ذخیره کنید و تمام عملیات های مورد نظرتون رو به راحتی روش انجام میدید و برای نمایش کافیه تابعی نوشته و تبدیل کنید به شمسی
موفق باشید

به نظرم باید همین کارو انجام بدم خداخیرت بده یه سوال کوچیک دیگه برای اینکه مدت زمان بین مثلا ساعت 3 دو روز پیش رو تا امروز مثلا همین ساعت 9 به دست بیارم فکر میکنی اگه سه مقدار تعداد روز و تعداد ساعت و تعداد دقیقه رو با هم جمع کنم به دست میاد؟

mousa1992
یک شنبه 28 خرداد 1391, 21:18 عصر
مدت زمان بین این دوتاریخ رو قراره بر حسب چی بدست بیارید؟
منظورو دقیقا متوجه نشدم !

dana65
یک شنبه 28 خرداد 1391, 21:23 عصر
مدت زمان بین این دوتاریخ رو قراره بر حسب چی بدست بیارید؟

بر حسب دقیقه میخوام محاسبه کنم میدونی این زمانو برای ورود و خروج یه خودرو میخوام که بعد به ازای هر دقیقه پولش رو محاسبه میکنم ضرب میشه به ما مبلغ میده که به ازای این ساعت توقف چقدر پرداخت بشه.

mousa1992
یک شنبه 28 خرداد 1391, 21:39 عصر
نهههه این کارو نکنیا :لبخند:

DateTime date1 = new DateTime(2012, 06, 01);
DateTime date2 = DateTime.Now;
TimeSpan ts = date2 - date1;
label1.Text = ts.TotalHours.ToString();



label1.Text = ts.TotalMinutes.ToString();


ببخشید حواسم نبود گفته بودید برحسب دقیقه
این کد جدید بر حسب دقیقه برمیگردونه
و امتحان کنید بر حسب ساعت دقیقه روز و...
موفق باشید