PDA

View Full Version : مبتدی: جمع تاریخ با یک عدد(روز).



mjzsoft25
سه شنبه 08 مرداد 1392, 16:53 عصر
سلام.
من می خواستم یک عدد (روز) رو با یک تاریخ جمع کنم مثلا:
1392/05/08
بعلاوه 6 روز
که میشه:
1392/05/16

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

manij_mhm
سه شنبه 08 مرداد 1392, 17:00 عصر
از چه نوع متغیری برای تاریخ استفاده می کنید؟
اگه از DateTime استفاده کنید. به راحتی میتونید از تابع AddDays استفاده کنید.
موفق باشید.

Amin69
سه شنبه 08 مرداد 1392, 17:23 عصر
از چه نوع متغیری برای تاریخ استفاده می کنید؟
اگه از DateTime استفاده کنید. به راحتی میتونید از تابع AddDays استفاده کنید.

سلام.
اگر میخواید به یک تاریخ شمسی اضافه کنید، باید مشخص بشه که از چه راهی استفاده میکنید؟ کامپوننت تاریخ شمسی یا namespace سی شارپ یا ...

roolinjax
سه شنبه 08 مرداد 1392, 17:30 عصر
سلام.
اگر میخواید به یک تاریخ شمسی اضافه کنید، باید مشخص بشه که از چه راهی استفاده میکنید؟ کامپوننت تاریخ شمسی یا namespace سی شارپ یا ...

سلام مسلما باید مشخص باشه
روش هایی که دوستان فرمودن برای تاریخ میلادیه
برای تاریخ شمسی باید اول تاریخ خود رو به میلادی تبدیل کنید و بعد تعداد روز رو بهش اضافه کنید و دوباره به شمسی برگردونید
چون تعداد روزهای ماه در تاریخ میلادی و شمسی باهم تفاوت دارند
مثلا 5 روز اضافه کردن به تاریخ شمسی 1392/2/25 میشه 1392/2/30 ، در حالی که توی تاریخ میلادی میشه 1392/3/1 !!!!!!

roolinjax
سه شنبه 08 مرداد 1392, 17:32 عصر
راستی تعداد روز ها میتونه بیشتر از یک ما یا یک سال باشه.

شما هزار (1000) روز اضافه کن مهم نیست ، این متد کار خودشو درست انجام میده به شرطی که در پست قبل گفتم (تبدیلات رو انجام بدین)

mjzsoft25
سه شنبه 08 مرداد 1392, 21:36 عصر
سلام
بفرمائید :
label1.Text = DateTime.UtcNow.Date.AddDays(9).ToString();
التماس دعا
دوست عزیز دستت درد نکنه ولی من میخواهم این تعداد روز به تاریخ خورشیدی که خود کاربر وارد میکنه اضافه بشه:لبخندساده:

mjzsoft25
سه شنبه 08 مرداد 1392, 21:36 عصر
سلام مسلما باید مشخص باشه
روش هایی که دوستان فرمودن برای تاریخ میلادیه
برای تاریخ شمسی باید اول تاریخ خود رو به میلادی تبدیل کنید و بعد تعداد روز رو بهش اضافه کنید و دوباره به شمسی برگردونید
چون تعداد روزهای ماه در تاریخ میلادی و شمسی باهم تفاوت دارند
مثلا 5 روز اضافه کردن به تاریخ شمسی 1392/2/25 میشه 1392/2/30 ، در حالی که توی تاریخ میلادی میشه 1392/3/1 !!!!!!

ببخشید میشه یه کم توضیح بدید البته با کد:لبخند:

manij_mhm
چهارشنبه 09 مرداد 1392, 14:16 عصر
اگه کامپوننت تاریخ شمسی می خواید، قبلا در سایت زیاد بحث شده، این نمونه کامپوننت تاریخ شمسی
http://barnamenevis.org/showthread.php?365257-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%B4%D9%85%D8%B3%DB%8C&highlight=%D8%AA%D9%82%D9%88%DB%8C%D9%85+%D8%B4%D9 %85%D8%B3%DB%8C

موفق باشید.

mjzsoft25
چهارشنبه 09 مرداد 1392, 22:20 عصر
خب دوست عزیز تاریخ شمسی کاربر رو به میلادی تبدیل کن بعد با کد من روز رو بهش اضاف کن بعد در نهایت برش گردون به شمسی !

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

Ghaem66
پنج شنبه 10 مرداد 1392, 00:16 صبح
DateTime miladi = pc.ToDateTime(Int32.Parse(txtdate.Text.Substring(0 , 4)), Int32.Parse(txtdate.Text.Substring(5, 2)), Int32.Parse(txtdate.Text.Substring(8, 2)), 0, 0, 0, 0, 0);
miladi = miladi.AddDays(Int32.Parse(txtrooz.Text));
txtdate.Text = pc.GetYear(miladi).ToString() + pc.GetMonth(miladi).ToString("00") + pc.GetDayOfMonth(miladi).ToString("00");

txtdate همون تکست باکسیه که تاریخ توشه. مثلا به صورت 1392/05/08
txtrooz همون تعداد روزیه که باید اضافه شه.

البته using system.globalization رو فراموش نکن. و همچنین یک شی به نامpc از نوع persiancalender بساز

mjzsoft25
پنج شنبه 10 مرداد 1392, 12:24 عصر
با سلام
دوستان چطوری میشه تو سی شارپ اعداد تصادفی تولید و بین اون تعداد اعداد تصادفی مثلا تنها یک عدد بر حسب درصد تولید شود
مثال:
میخواهیم 10 عدد از 1 تا 9 تولید کنیم و حالا باید بر حسب اون مقدار درصدی که مشخص است (ورودی از کاربر یا ثابت ) عدد 5 حتما باشد و به تعداد اون درصد تولید شود

مثال:
درصد تولیدی عدد 5 : 10 درصد
تعداد اعداد: 10
بازه تولیدی: 1-9
حالا باید خروجی مثلا این طوری بیاید: 1-9-5-3-2-1-4-7-6-8
همان طور که میبینید عدد 5 بر حسب درصد تولیدی تولید شده و در بین اعداد هست


ممنون میشم راهنمایی کنید

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

Random rnd=new Random();
//int percept_rnd=10;
lst_numbers.Items.Clear();
for (int i = 1; i < 11; i++)
{

lst_numbers.Items.Add(rnd.Next(1, 10));
}

دوستان لطفا یه پیشنهادی بدین چی کار کنم...

Ghaem66
پنج شنبه 10 مرداد 1392, 14:18 عصر
سلام
با تشکر از شما
بنده هم می تونستم جواب رو براش بنویسم ولی همه جیز رو در اختیارش گذاشتم کد + تحلیل حالا گذاشتم خودش به تنیجه نهایی برسه که...

سلام. من میدونم که باید هر کسی خودش به نتیجه برسه. اما شاید بعضی اوقات دادن کد گره بزرگی رو وا کنه. شاید تو اون لحظه شخص اصلا نتونه هیچ تحلیلی انجام بده(حتی تحلیل ساده). کارم اشتباه هست و قبول دارم. اما واسه زودتر نتیجه گیری دوستمون کدشو گذاشتم. عذر میخوام.

momimomi
چهارشنبه 18 دی 1392, 23:09 عصر
با سلام
با تو جه به این عکسها و سورس برنامه دوستان راهنمایی کنند ایراد برنامه کجاست که:
1- در عکس اول با اضافه کردن 1 روز و 1 ماه ==> 2 روز و یک ماه اضافه می شود؟
2- در عکس دوم با اضافه کردن 2 ماه ==> 2 ماه اضافه شده اما یک روز کم می شود؟
3- در عکس سوم با اضافه کردن 3 سال==> 3 سال و یک روز اضافه می شود؟
115079
115080
115081
این هم سورس 44.8 کیلو بایت
115082

Mousavmousab
جمعه 20 دی 1392, 12:07 عصر
دوست عزیز من دقایقی روی این موضوع فکر کردم. کدی که شما نوشتی فکر نمی کنم غلط باشه ( حتی از لحاظ منطقی) ولی نمی دونم چه تفاوت های دیگه ای این وسط هست که بین تبدیل ها مشکل ساز میشه و نتیجه مورد انتظار ما حاصل نمیشه.
از طرفی من یه جور دیگه خواستم این مسئله را حل بکنم . ببین به نظرت من کجا اشتباه کردم؟ یا اصلا اشتباه کردم یا نه؟!!!
من می گم وقتی خود PersianCalender به ما روز و ماه و سال را به شمسی به ما درست میده چرا ما دستی روز و ماه و سال را اضافه نکنیم؟ چرا به DateTime خواهش کنیم که برای ما روز و ماه را اضافه یا هم کنه؟

تا اینجا را که خودش به ما میده :



PersianCalendar pc = new PersianCalendar();

string strdate = pc.GetYear(DateTime.Now).ToString() + "/" +
pc.GetMonth(DateTime.Now).ToString() + "/" +
pc.GetDayOfMonth(DateTime.Now).ToString();
txtDate.Text = strdate;


بعد ما به صورت دستی مقادیر روز و ماه و سال را به تاریخی که PC به ما داده اضافه می کنیم. با این شرطی که اگر ماه بین 1 تا 6 بود ، پس روز ها باید 31 روز حساب بشه و اگه ماه بعد از 6 تا 11 بود ماه 30 روز حساب بشه و اگه ماه 12 بود 29 روز حساب بشه و مگر اینکه سال کبیسه باشه و ما ماه 12 هم 30 روز حساب کنیم.
این الگوریتم منه یه نظرت اگه یه کلاس به این شکل بنویسیم چطوره؟ کجا های حرفم ایراد داره؟ فقط اینو در نظر داشته باش که شاید این مسئله را بعضی ها حل کرده باشن و به صورت یک DLL در آورده باشند ولی یک برنامه نویس باید خودش بدونه دقیقاٌ داره چه اتفاقی توی برنامه اش می افته به ویژه تاریخ که در حسابداری به شدت آسیب رسونه و باید کنترل بشه

منتظر نظر حضرت عالی ام.

momimomi
جمعه 20 دی 1392, 20:19 عصر
بعد ما به صورت دستی مقادیر روز و ماه و سال را به تاریخی که PC به ما داده اضافه می کنیم. با این شرطی که اگر ماه بین 1 تا 6 بود ، پس روز ها باید 31 روز حساب بشه و اگه ماه بعد از 6 تا 11 بود ماه 30 روز حساب بشه و اگه ماه 12 بود 29 روز حساب بشه و مگر اینکه سال کبیسه باشه و ما ماه 12 هم 30 روز حساب کنیم.

منتظر نظر حضرت عالی ام.

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

momimomi
یک شنبه 22 دی 1392, 20:32 عصر
درست شد:لبخند:
اینم سورس اصلاح شده
115265

Mousavmousab
یک شنبه 22 دی 1392, 21:30 عصر
سلام شاید دیر باشه ولی تفاوت خیلی آسونه

یا سال کبیسه هست یا سال کبیسه نیست.
اگر کبیسه بود ماه آخر را 30 روز در نظر می گیریم و اگر کبیسه نبود 29 روز
با تابع LeapYear از کلاس خود مایکروسافت می توان فهمید.


PersianCalendar pc = new PersianCalendar();
int CurrentYear = pc.GetYear(DateTime.Now);

if (pc.IsLeapYear(CurrentYear))
{
}
else
{
}

momimomi
یک شنبه 22 دی 1392, 22:00 عصر
سلام شاید دیر باشه ولی تفاوت خیلی آسونه

یا سال کبیسه هست یا سال کبیسه نیست.
اگر کبیسه بود ماه آخر را 30 روز در نظر می گیریم و اگر کبیسه نبود 29 روز
با تابع LeapYear از کلاس خود مایکروسافت می توان فهمید.


PersianCalendar pc = new PersianCalendar();
int CurrentYear = pc.GetYear(DateTime.Now);

if (pc.IsLeapYear(CurrentYear))
{
}
else
{
}




با تشکر از شما دوست گرامی
با این سورس اصلاح شده که گذاشتم دیگه نیازی به محاسبه کبیسه هم نیست, دقیق کار می کنه, با سال 91 و 95و99و... امتحان کنید دقیق جواب میده.