PDA

View Full Version : سوال: مقایسه بین دو تاریخ در C#.Net



mohajer.mn
دوشنبه 18 شهریور 1387, 11:21 صبح
با سلام
نیاز به مقایسه بین دو تاریخ Xوy در یک برنامه داریم
که تاریخ ها به صورت شمسی می باشد
برای ذخیره در بانک Sql و همچنین مقایسه آن از چه روشی باید استفاده کنم
نوع فیلد من در بانک از چه نوعی باید تعریف شود

afsharm
دوشنبه 18 شهریور 1387, 13:10 عصر
لطفا سوال خود را واضح‌تر بپرسید:
۱- منظور از «شمسی» چیست؟ شما از نوع DateTime استفاده می‌کنید یا PersianCalendar؟
۲- مقایسه را در SQL می‌خواهید انجام دهید یا C#؟

mohajer.mn
دوشنبه 18 شهریور 1387, 17:10 عصر
همانطور که می دانیم در نوع datetime نمی توانیم تاریخ را به صورت شمسی (1378/08/12)ذخیره کنیم کمتر از سال 1990 قبول نمی کند
بانک من Sql است مثلا می خواهم کالاهایی که بین تاریخ x و Y به ثبت رسیده اند را نمایش دهم
برای ذخیره تاریخ از چه نوعی استفاده کنم با توجه به آنکه نوع datetime قبول نمی کند؟

kiumarsknb
سه شنبه 19 شهریور 1387, 12:29 عصر
سلام

تاريخ رو ميتونيد بصورت فيلد عددي ذخيره كنيد و بعد عمل تفريق رو روش انجام بدين البته اين فيلد در هنگام دريافت مقدار از كاربر بهتر براش ماسك تعريف شده باشه.

amin10043
پنج شنبه 21 شهریور 1387, 23:10 عصر
به نظر من می تونید تاریخ رو به صورت رشته ذخیره کنی.همون کاری که من تو برنامه هام انجام میدم.
برای مقایسه اونها هم می تونی بصورت رشته ای با اون برخورد کنی.یعنی خودت بخش هاشو جدا کنی.

maalimom
پنج شنبه 21 شهریور 1387, 23:23 عصر
سلام دوست عزیز
من نرم افزار های زیادی رو کار کردم و با انواع و اقسام روشهای ذخیره تاریخ در پایگاه برنامه نوشتم
بهترین راه اینکه نوع فیلد تاریخ رو در پایگاه عددی بگیری
چون اگه یه وقتی احتیاج به این بود که در بازه زمانی جستجو داشته باشی مشکلی نداشته باشی
درضمن از

maskedTextBox
برای ورود اطلاعات استفاده کن برای ذخیره در پایگاه فقط کافی
textbox1.Text.replase("/","");

maalimom@yahoo.com

amirbakhtiary
سه شنبه 26 شهریور 1387, 13:37 عصر
برای مقایسه بیت دو تاریخ بهترین روش استفاده از farsi library است.
شما دو تا fadatetimepicker روی فرم میندازی و تاریخ رو از اونا می خونی و مقایسه می کنی.
در ضمن تاریخ را تو دیتا بیس به صورت datetime تعریف میکنی.

j68719
یک شنبه 18 اسفند 1387, 09:21 صبح
سلام
من هم دارم یه برنامه می نویسم با این مشکل شما برخوردم خواهش می کنم یه راه حل مناسب برام بگو اگه مشکلت حل شده مقایسه تاریخ ها رو برام بنویس و در آخر فیلد تاریخ تو بانک از چه نوعی بگیرم
ببخشید پرحرفی کردم .:تشویق::لبخندساده::لبخندساد ه::لبخندساده:

hasan_esfahan
سه شنبه 27 اسفند 1387, 19:00 عصر
چند روش وجود داره که من از انها استفاده کردم و نکته هاش
1- استفاده از فیلد رشته ای به این صورت که فیلد شما اگر به صورت رشته ای باشه و مقایسه کنید هیچ مشکلی برای شما پیش نخواهد امد در صورتی که این گونه باشد

1387/02/12 1387/12/10
اما مشکل زمانی بوجود می اید که تاریخ به صورت زیر ذخیره شود
1387/1/10 1387/12/1
که شما برای حل این مشکل با چند خط کد ساده می تونید ان را حل کنید

2- شما می تونید تاریخ فارسی را به سیستم بدهید و تعداد روزهای ان را ذخیره کنید مثلا 154577
که برای قرار دادن تاریخ درون دیتا تایم


datetime dt=datetime.parse("1387/12/10");


3- شما می تونید تاریخ شمسی را به تاریخ معادل میلادی تبدیل کنید و ذخیره کنید و برای نمایش دوباره تاریخ میلادی را به شمسی

محمدامین شریفی
دوشنبه 24 فروردین 1388, 19:27 عصر
اما روشی که من استفاده میکنم.اینست که سال و ماه و روز را به صورت متغیرهای int جداگانه ذخیره میکنم.به نظر من از لحاظ نرمال سازی و تبدیل خیلی راحت تر از بقیه روش ها است.

esfahanitg
چهارشنبه 01 مهر 1388, 17:11 عصر
من پيشنهاد مي دم كه تاريخ ها رو به صورت كاملا رشته اي و با رعايت / ها ذخيره كنيد.من تا حالا با اين روش كار كردم و هيچ مشكلي نبوده و خيلي راحت قابل مقايسه و جستجو هست .مثلا شما به راحتي مي تونين از اين دستور Select واسه جستجو استفاده كنيد

select * from tbl_objects where buy_dat >N'1387/11/10'

aryanss
پنج شنبه 28 آذر 1392, 00:43 صبح
چند روش وجود داره که من از انها استفاده کردم و نکته هاش
1- استفاده از فیلد رشته ای به این صورت که فیلد شما اگر به صورت رشته ای باشه و مقایسه کنید هیچ مشکلی برای شما پیش نخواهد امد در صورتی که این گونه باشد

1387/02/12 1387/12/10
اما مشکل زمانی بوجود می اید که تاریخ به صورت زیر ذخیره شود
1387/1/10 1387/12/1
که شما برای حل این مشکل با چند خط کد ساده می تونید ان را حل کنید

2- شما می تونید تاریخ فارسی را به سیستم بدهید و تعداد روزهای ان را ذخیره کنید مثلا 154577
که برای قرار دادن تاریخ درون دیتا تایم


datetime dt=datetime.parse("1387/12/10");


3- شما می تونید تاریخ شمسی را به تاریخ معادل میلادی تبدیل کنید و ذخیره کنید و برای نمایش دوباره تاریخ میلادی را به شمسی

من همین مشکل و دارم با persiancalender میگیرم که اعداد یک رقمی و میخوام دو رقمی وارد کنه
متوجه راه حل شما نشدم

gerdioz
دوشنبه 16 دی 1392, 10:49 صبح
public int DifDate(string DateStart,string DateEnd)
{
try
{
PersianCalendar ps = new PersianCalendar();
DateTime dt1 = ps.ToDateTime(Int32.Parse(DateStart.Substring(0, 4)), Int32.Parse(DateStart.Substring(5, 2)), Int32.Parse(DateStart.Substring(8, 2)), 0, 0, 0, 0);
DateTime dt2 = ps.ToDateTime(Int32.Parse(DateEnd.Substring(0, 4)), Int32.Parse(DateEnd.Substring(5, 2)), Int32.Parse(DateEnd.Substring(8, 2)), 0, 0, 0, 0);
int count = (dt2 - dt1).ToString().IndexOf(".");
int tm = int.Parse((dt2 - dt1).ToString().Substring(0, count)) * 24;

return tm;
}
catch
{
return 0;
}
اگر خواستی یک کلاس آماده از خودم برای کار با تاریخ ارسال کنم

momimomi
چهارشنبه 18 دی 1392, 21:19 عصر
public int DifDate(string DateStart,string DateEnd)
{
try
{
PersianCalendar ps = new PersianCalendar();
DateTime dt1 = ps.ToDateTime(Int32.Parse(DateStart.Substring(0, 4)), Int32.Parse(DateStart.Substring(5, 2)), Int32.Parse(DateStart.Substring(8, 2)), 0, 0, 0, 0);
DateTime dt2 = ps.ToDateTime(Int32.Parse(DateEnd.Substring(0, 4)), Int32.Parse(DateEnd.Substring(5, 2)), Int32.Parse(DateEnd.Substring(8, 2)), 0, 0, 0, 0);
int count = (dt2 - dt1).ToString().IndexOf(".");
int tm = int.Parse((dt2 - dt1).ToString().Substring(0, count)) * 24;

return tm;
}
catch
{
return 0;
}
اگر خواستی یک کلاس آماده از خودم برای کار با تاریخ ارسال کنم

سلام
لطفا ارسال بفرمایید:تشویق: