PDA

View Full Version : ایجاد تاریخ سر رسید با فاصله ماههای مختلف



h.gheidrlou
شنبه 12 دی 1394, 18:54 عصر
باسلام خدمت دوستان و اساتید بزرگوار
من میخوام تاریخ ابتدا را وارد کنم و سپس باواردکردن تعداد ماه و فاصله بین تعداد تاریخها ، به نتیجه برسم
مثال
تاریخ شروع 1394/01/01 تعداد 12 قسط با فاصله 3 ماهه که باید نتیجه شود :
1 - سررسید اول : 1394/04/01
2 - سررسیددوم : 1394/07/01
3- سررسید سوم : 1394/10/01
4- سررسید چهارم الی اخر............................
لطفا راهنمایی کنید138147
این کد را نوشتم کار میده ولی مشکلی داره به شرح ذیل
اگر تایخ شروع 1394/03/31 باشه برای ماههای 6ماهه دوم 31 هرماه را خطا-میزنه چون ماهها 30 رزوه هست و اسفند ماه را هم اگر 29 رزوه باشه خلاف اون رو خطا میده

Amir4317
شنبه 12 دی 1394, 20:06 عصر
سلام!

کلاس DateTime بر پایه تاریخ میلادی کار میکنه و شما نامهندسی کردید و مقدار شمسی ریختید توش.
از کلاس Persian Date استفاده کنید که قبلاً هم در انجمن در موردش زیاد گفتگو شده.

برای افزودن مقدار به تاریخ به این صورت استفاده میشه:

DateTime today = DateTime.Now; // تاریخ دلخواه شما
DateTime answer = today.AddDays(30); // سی روز بعد
DateTime answer = today.AddMonths(1); // یک ماه بعد


سری به صفحه System.DateTime (https://msdn.microsoft.com/en-us/library/System.DateTime%28v=vs.110%29.aspx) بزنید.

h.gheidrlou
شنبه 12 دی 1394, 20:56 عصر
دوست عزیز متشکرم از لطف و محبتون
ولی نتونستم تاریخ وارده وارد کنم
لطفا راهنماییم کنید
138150

h.gheidrlou
شنبه 12 دی 1394, 21:38 عصر
کسی نبود کمک کنه؟؟؟؟؟؟؟؟؟؟
دوست عزیز این کارو هم کردم ولی تاریخ های بعدی را معادل میلادی میده یعنی بجای1395/02/30 تاریخ 1395/02/28 را میده

khokhan
شنبه 12 دی 1394, 22:11 عصر
کسی نبود کمک کنه؟؟؟؟؟؟؟؟؟؟
دوست عزیز این کارو هم کردم ولی تاریخ های بعدی را معادل میلادی میده یعنی بجای1395/02/30 تاریخ 1395/02/28 را میده

.................................................. ...

private void button1_Click(object sender, EventArgs e)
{
int countMounth = int.Parse(textBox2.Text.Trim().ToString());
var source = new BindingSource();
List<PersainDate.Dateana> rv = new List<PersainDate.Dateana>();

for (int i = 0; i < countMounth; i++)
{
PersainDate.Dateana datea = new PersainDate.Dateana();
var persianCalendar = new System.Globalization.PersianCalendar();
var today = GetGregorianDate(dateTimePickerX1.SelectedDateInSt ringPersian);// DateTime.Today;
var nextMonth = persianCalendar.AddMonths(today, i);
var persianDate = PersainDate.ConvertToPersian(nextMonth).ToShortDat eString();
datea.Foo=i;
datea.Name = persianDate;
rv.Add(datea);
}
dataGridView1.DataSource = rv;

}

h.gheidrlou
شنبه 12 دی 1394, 22:16 عصر
تشکر دوست عزیز
لطفا تاریخ شروع را 1393/03/31 بزنید به تعداد 12 ماه مساوی یک ماهه
نتیجه چطوری میشه؟
مشکل در تاریخ 1394/02/28 و1394/02/29 و روزهای 30 ام و 31 ام هرماهه

khokhan
شنبه 12 دی 1394, 22:46 عصر
تشکر دوست عزیز
لطفا تاریخ شروع را 1393/03/31 بزنید به تعداد 12 ماه مساوی یک ماهه
نتیجه چطوری میشه؟
مشکل در تاریخ 1394/02/28 و1394/02/29 و روزهای 30 ام و 31 ام هرماهه

بفرما این هم برا 12 ماه مشکل تاریخهای داخل گرید رو هم حل کردم برات

h.gheidrlou
شنبه 12 دی 1394, 22:51 عصر
متشکرم استاد بزرگوار
واقعا عالی بود از عصر تا حالا دارم باهاش کلنجار میرم
شما خیلی لطف کردید
متشکرم

khokhan
شنبه 12 دی 1394, 22:55 عصر
استاد بزرگوار در این خصوص مشکلی نیست ولی لطفا تاریخ 1394/03/30 یا 1394/03/31 یا 1394/03/29 را به تعداد 12 ماه وارد کنید
خطا مربوطه را مشاهده کنید
متشکرم

لطفا به تصویر خوب نگاه کن تاریخ وارد شده 31 خرداد ماه و تعداد ماهها هم 12 هست دیگه مشکل چیه؟
وایضا به شماره ردیف 9 در گرید هم توجه کن :لبخند:

h.gheidrlou
چهارشنبه 19 آبان 1395, 20:41 عصر
باسلام خدمت اساتید بزرگوار
لطفا درمورد سورس ذیل بنده را راهنمایی کنید راهکار بهم بدید143424

محمد آشتیانی
چهارشنبه 19 آبان 1395, 22:06 عصر
سلام
شما باید از متد AddMonths موجود در کلاس PersianCalendar استفاده کنید ، به این تکه کد دقت بفرمائید


var pc = new PersianCalendar();
var initialDate = DateTime.Now;
for (var i = 1; i <= 12; i++)
{
var date = pc.GetYear(initialDate) + "/" + pc.GetMonth(initialDate).ToString("00") + "/" + pc.GetDayOfMonth(initialDate).ToString("00");
listBox1.Items.Add(date);
initialDate = pc.AddMonths(initialDate, 1);
}

h.gheidrlou
چهارشنبه 19 آبان 1395, 22:19 عصر
جناب استاد من از همین گزینه استفاده کرده ام اگر داخل حلقه را ببینید ازهمین متد استفاده کرده ام ولی اشکال داره بازم

محمد آشتیانی
چهارشنبه 19 آبان 1395, 22:21 عصر
خیر عزیزم ، شما از متد AddMonths مربوط به DateTime استفاده کردید ، بنده عرض کردم از متد AddMonths مربوط به کلاس PersianCalendar استفاده بفرمائید.
به تکه کدی که قرار دادم دقت بفرمائید لطفا

h.gheidrlou
چهارشنبه 19 آبان 1395, 23:56 عصر
143430
چون یکی ازاساتید ((جناب کوهکن یکی ازاساتید گروه ))کمکم کردند منم برای کمک به دیگران این فایل بسیار به درد بخور را برای استفاده دیگران قرار دادم

دراین فایل دوتاریخ را به صورت ماهانه شمسی و به فواصل مختلف حساب میکنه و خیلی به درد میخوره-- البته من خیلی دست کاریش کردم