PDA

View Full Version : مشکل در جمع تاریخ سیستم



jafarpalideh
پنج شنبه 15 تیر 1391, 23:59 عصر
باسلام مجدد

من توی لود فرمم این کد رو نوشتم
textBox4.Text = PersianDate.Now.ToShortDateString();
حالا میخوام تاریخ جاری سیستم رو با تکست باکسی که خودم وارد میکنم جمع کنم کدش هم اینه
DateTime date = Convert.ToDateTime(textBox4.Text);

textBox6.Text=date.AddDays(Convert.ToDouble(textBo x5.Text)).ToShortDateString();
حالا مشکل من اینه که توی نتیجم که توی تکست باکس 6 هستش جای ماه و سال و روز بهم میخوره
یعنی توی تکست باکس چهارم اینجوریه 1391/04/16 ولی وقتی مثلا با جمعش میکنم اینطوری میشه 4/23/1391
راه حلی وجود داره واسه رفع این مشکل؟

the king
جمعه 16 تیر 1391, 01:41 صبح
بجای اینکه از ToShortDateString استفاده کنید از ToString استفاده نمایید و مجبورش کنید که اونطور که شما دوست دارید خروجی بده، فرضا با این ترتیب :

date.ToString("yyyy/MM/dd")

samadblaj
جمعه 16 تیر 1391, 01:51 صبح
بجای اینکه از ToShortDateString استفاده کنید از ToString استفاده نمایید و مجبورش کنید که اونطور که شما دوست دارید خروجی بده، فرضا با این ترتیب :

date.ToString("yyyy/MM/dd")


دوست عزیز میشه یه روش مناسب برای محاسبه تاریخ های شمسی برامون معرفی کنید خود شما توی پروژه هاتون به چه شکل استفاده میکنید؟

the king
جمعه 16 تیر 1391, 12:33 عصر
دوست عزیز میشه یه روش مناسب برای محاسبه تاریخ های شمسی برامون معرفی کنید خود شما توی پروژه هاتون به چه شکل استفاده میکنید؟
معمولا تاریخی که وارد نرم افزار می شه همون موقع دریافت در فرم چک شده و قابل قبوله، اینه که صرفا تبدیل اش می کنم.


private string DateToPersian(DateTime d)
{
System.Globalization.PersianCalendar persian
= new System.Globalization.PersianCalendar();
return string.Format("{0}/{1:00}/{2:00}"
, persian.GetYear(d), persian.GetMonth(d), persian.GetDayOfMonth(d));
}

private DateTime PersianToDate(string s)
{
System.Globalization.PersianCalendar persian
= new System.Globalization.PersianCalendar();
string[] p = s.Split('/');
return persian.ToDateTime(int.Parse(p[0]), int.Parse(p[1]), int.Parse(p[2]), 0, 0, 0, 0);
}


مثلا :

private void Form1_Load(object sender, EventArgs e)
{
string s = DateToPersian(DateTime.Now);
DateTime d = PersianToDate("1383/05/16");
}

samadblaj
جمعه 16 تیر 1391, 14:14 عصر
ممنونم دوست عزیز از پاسختون ولی ببخشید سوالاتی پیش اومد لطفا کمکم کنید.

لطفا اگه امکانش هست کد رو برام توضیح دهید ممنونم

میخوام تاریخ میلادی سیستم به شمسی تبدیل بشه! کد شما تاریخ شمسی رو به میلادی تبدیل میکنه؟

string s = DateToPersian(DateTime.Now);

DateTime d = PersianToDate("1391/05/16");
MessageBox.Show(d.ToString());

the king
جمعه 16 تیر 1391, 17:13 عصر
قضیه یک مقدار با آن چیزی که فکر می کنید فرق می کنه، DateTime بدون توجه به تقویم تاریخ و زمان را نگهداری می کنه، کاری نداره که
تقویم سیستم چیه، حالا اگر تقویم پیشفرض سیستم میلادی باشه که معمولا هست موقع نمایش میلادی نشون اش میده، اما به هر حال
تاریخ تاریخه و DateTime یکی و یک نوع بیشتر نیست. یعنی فرضا اگر در DateTime تاریخ رو به میلادی بدهید در همان لحظه DateTime
می تونه با هر تقویمی تاریخ رو اعلام کنه، صرفا باید تقویم مقصد رو مشخص کنید.

شما اگر می خواهید تاریخ به شمسی تبدیل بشه، DateToPersian به شمسی تبدیلش می کنه، بدون اینکه کاری داشته باشه که تقویم
پیشفرض سیستم میلادی یه یا قمری یا ... فقط نتیجه مهمه که توسط PersianCalendar به شمسی تبدیل میشه.

اگر می خواهید صریحا مقداری مثل "3/16/2005" رو از تقویم میلادی بگیرید و به شمسی تبدیل کنید، صرفا تابعی لازم دارید که همیشه از تقویم
میلادی استفاده کنه :

private DateTime GregorianToDate(string s)
{
System.Globalization.GregorianCalendar gregorian
= new System.Globalization.GregorianCalendar();
string[] p = s.Split('/');
return gregorian.ToDateTime(int.Parse(p[2]), int.Parse(p[0]), int.Parse(p[1]), 0, 0, 0, 0);
}

private string DateToGregorian(DateTime d)
{
System.Globalization.GregorianCalendar gregorian
= new System.Globalization.GregorianCalendar();
return string.Format("{0:00}/{1:00}/{2}"
, gregorian.GetMonth(d), gregorian.GetDayOfMonth(d), gregorian.GetYear(d));
}


اگر خواستید بین شمسی و میلادی تبدیلی انجام بدهید اول ورودی رو به DateTime تبدیل اش کنید که بین هر دو مشترکه،
DateTime شمسی و قمری و میلادی سرش نمیشه، تاریخ رو نجومی و خیلی دقیق نگهداری می کنه.

مثلا :

private void Form1_Load(object sender, EventArgs e)
{
DateTime d = GregorianToDate("3/16/2005");
string s = DateToPersian(d);

string t = DateToGregorian(DateTime.Now);
}

samadblaj
جمعه 16 تیر 1391, 21:18 عصر
ممنونم از توضیحات کاملتون خیلی زحمت کشیدید

همینو میخواستم میخوام توی برنامه ام کلا از تاریخ شمسی استفاده میکنم و بایت محدودیت بزارم که کاربر فقط از تاریخ شمسی استفاده کنه و محاسبه توی برنامه هم باید شمسی باشه.

توی یه جمله بگم : توی برنامه من چیزی به اسم تاریخ میلادی نیست

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

jafarpalideh
شنبه 17 تیر 1391, 07:15 صبح
textBox6.Text=date.AddDays(Convert.ToDouble(textBo x5.Text)).ToShortDateString();
چطوری تکست باکس 6 رو به دیتابیس بفرستم؟
این رو ایراد میگیره

DR[4]= textBox6.Text=date.AddDays(Convert.ToDouble(textBo x5.Text)).ToShortDateString();

jafarpalideh
یک شنبه 18 تیر 1391, 11:30 صبح
مشکل من کجا بوده دوستان؟
کجای کارم میلنگه؟

sobijoon
یک شنبه 18 تیر 1391, 12:06 عصر
من بهت ی لینک میدم که توش یه برنامه کوچیک نوشتم که اختلاف دو تاریخ رو محاسبه میکنه دانلودش کن و با تغییر - به + کارت راه می افته .
http://barnamenevis.org/showthread.php?347662-B-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81-%D8%A8%DB%8C%D9%86-%D8%AF%D9%88-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%A8%D8%A7-%D8%A7%D8%AD%D8%AA%D8%B3%D8%A7%D8%A8-%D9%85%D8%A7%D9%87%D8%A7%DB%8C-29%D9%8830%D9%8831-%D8%B1%D9%88%D8%B2%D9%87-B
موفق باشی

NIMA_1981
پنج شنبه 19 بهمن 1391, 12:26 عصر
یک سوال داشتم در .net برای تبدیل به قمری چیزی نداره مثل همین شمسی که اضافه شده با تشکر

ma.rad
پنج شنبه 19 بهمن 1391, 12:44 عصر
چرا

HijriCalendar HijriCalendar = new HijriCalendar();