PDA

View Full Version : سوال: مشکل اساسی با تاریخ



navid1n2000
چهارشنبه 13 خرداد 1388, 12:45 عصر
:عصبانی++:
من تویه پروژه م خیلی باتاریخ سر و کار دارم
بیشتر تاریخایی که توی دیتابیسه
بدست آوردن مدت عضویت
تخمین تاریخ
مثلامن نمیتونم حساب کنم مدت عضویت فرد رو
در صورتی که تاریخ عضویت یک string توی دیتابیسه
میشه کلا یه جایی معرفی کنین یا یه مقاله در مورد کار با تاریخ در C#

NewFoxStudent
چهارشنبه 13 خرداد 1388, 13:58 عصر
ذخیره تاریخ به صورت string کار واقعا اشتباهیه بخصوص وقتی که بانکتون Sql باشه
بخاطر اینکه توابع زیادی برای کار با تاریخ وجود داره که تقریبا تمام نیازهای کار با تاریخ رو براورده میکنن
باید تاریخ رو به صورت datetime تو بانک ذخیره کنید تا بتونید از تمام قابلیتهای بانک و vs در مورد کار با مقادیر تاریخ بهره ببرید

bahar_engineer
چهارشنبه 13 خرداد 1388, 14:11 عصر
هر جا لازم داری اون string رو به شکل زیر به dateTime تبدیل کن :

فرض کنیم متغیر رشته ای شما اسمش هست Date به این شکل عمل کنید:

یک متغیر از نوع datetime تعریف کنید و متغیر رشته ای رو به datetime تبدیل کرده و در اون قرار دهید. از این به بعد از این متغیر myborn استفاده کنید



DateTime myborn;
myborn = Convert.ToDateTime(date);


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

تبدیل تاریخ میلادی به شمسی :



// convert milady to shamsi
System.Globalization.PersianCalendar shamsi = new System.Globalization.PersianCalendar();
DateTime sh;
string strdate = null;
strdate = DateTime.Now.ToString("yyyy/MM/dd");
sh = DateTime.Parse(strdate);
int ysh = shamsi.GetYear(sh);
int msh = shamsi.GetMonth(sh);
int dsh = shamsi.GetDayOfMonth(sh);
// end convert datetime


تبدیل تاریخ شمسی به میلادی :



//convert shamsi to miladi
public DateTime Shamsi2Miladi(string _date)
{
int year = int.Parse(_date.Substring(0, 4));
int month = int.Parse(_date.Substring(5, 2));
int day = int.Parse(_date.Substring(8, 2));
PersianCalendar p = new PersianCalendar();
DateTime date = p.ToDateTime(year, month, day, 0, 0, 0, 0);
return date;
}

civilan
جمعه 02 خرداد 1393, 12:38 عصر
سلام دوست عزیز این روش برای یک روزهای خاص جواب نمیده
مثلا ماه دوم میلادی 28 روزه و ماه دوم شمسی 31 روز بنابراین 29 ام و 30 ام و 31 ام رو ارور خواهد داد چون روزهای ولید نیستند

hosseinbarnamenevis
جمعه 02 خرداد 1393, 14:24 عصر
به نظر من اصلا به این ماه های خاص نیازی نیست
من هیچ وقت به مشکل نخوردم و تاریخ رو داخل یه متعیر string یا همون nvarchar ذخیره میکنم و تا به اینجا هر مشکلی که هم بوده به نحوی حل کردم

ali_md110
جمعه 02 خرداد 1393, 14:39 عصر
سلام چرا همون استاندارد بانکها رو رعایت نمیکنید؟ شما که دارید از شمسی رشته ای به میلادی تبدیلش میکنید بیاید تاریخ رو بصورت میلادی استاندارد ذخیره کنید بعد Cتبدیل کنید به شمسی
ذخیره تاریخ بصورت میلادی درون دیتابیس مزایای بیشتری داره نسبت به رشته ای ذخیره کردن
هم میتونید از Culture ها استفاد کنید برای تبدیل به شمسی و میلادی شدنشون هم توابع درون Sql Server برای اعمال خاص و توابع خاص زمانی
و همینطور در ابزار گزارش گیری هم مشکلات کمتری دارید
در ضمن روش رشته ای برای برنامه نویسی با پترن MVVM و Asp.net MVC کمی مشکل دارید چون از بایندیدنگ استفاده میشه
ولی در فرمت Date Timeمیتونید از یک کلاس مبدل و واسط IValueConverteor بهره در WPF ببرید یا Html Helper و عمل تبدیلات تاریخی رو به شکلی مناست انجام بدید