PDA

View Full Version : مبتدی: استفاده از persian calendar



alimooghashang
شنبه 01 مهر 1391, 13:09 عصر
سلام
من داخل برنامه ام میخوام از persiancalendar استفاده کنم که تمام تقویم های داخل برنامه ام به شمسی تبدیل بشه
اولا لطفا بگید چطوری باید این کار رو بکنم؟
ثانیا این روش مشکلی با تفاوت تاریخ ها نداره؟ مثلا برج 6 شمسی 31 روز داره ولی برج 6 میلادی 30 روز! و با سال های کبیسه هم مشکلی نداره؟
ممنون

ali_habibi1384
یک شنبه 02 مهر 1391, 17:37 عصر
يه شي ازش بسازيد و از توابعش استفاده كنيد.
مشكلي پيش نمياد.

me_eshaghi
دوشنبه 03 مهر 1391, 09:35 صبح
مثال
using System.Globalization;
//-------------
DateTime date_time = DateTime.Now;
PersianCalendar persianCal = new PersianCalendar();
month = persianCal.GetMonth(date_time).ToString();
days = persianCal.GetDayOfMonth(date_time).ToString();
if (Convert.ToInt32(month) < 10)
month = "0" + month;
if (Convert.ToInt32(days) < 10)
days = "0" + days;
string new_date = persianCal.GetYear(date_time).ToString() + "/" + month + "/" + days;

alimooghashang
سه شنبه 04 مهر 1391, 14:33 عصر
منظورم رو نگرفتید
میخوام کاری کنم که شیء datetime که داخل برنامه ها استفاده میکنم، تاریخ های شمسی رو قبول کنه
مثل 31/6/1391
نمیخوام داخل اون شیء datetime تاریخ میلادی ذخیره کنم
اکی؟

harani
سه شنبه 04 مهر 1391, 14:45 عصر
خب یه usercontrol بسازید که مثل datetime باشه ولی تاریخ شمسی رو برگردونه کاری نداره که.اگه بخواین monthcalander رو به فارسی برگردونید کاری نسبتاً مشکلی .

alimooghashang
سه شنبه 04 مهر 1391, 15:57 عصر
دوست عزیز بحث به اینجا ختم نمیشه که یه یوزر کنترل بسازم
من میخوام اطلاعات رو داخل یک gridex که از کامپوننت های janus هست استفاده کنم
و داخل اون فقط و فقط datetime رو قبول میکنه!

programerinfonet
سه شنبه 04 مهر 1391, 16:31 عصر
وقتی که از کلاس Persian alender استفاده کنی درست میشه
موفق باشی

alimooghashang
سه شنبه 04 مهر 1391, 16:40 عصر
وقتی که از کلاس Persian alender استفاده کنی درست میشه
موفق باشی
اخه چطور؟
میشه یه نمونه مثال بزنید؟

hakim22
سه شنبه 04 مهر 1391, 16:47 عصر
در دات نت 4 و پایینتر که DateTime فقط و فقط تاریخ های میلادی رو درون خودش نگاه میداره .
در حقیقت شی DateTime مقادیر ورودی رو وارسی می کنه تا مطمئن بشه تاریخ از نظر میلادی Valid باشه.
به همین دلیل هم نمیشه تاریخ های شمسی رو توش جا داد ( ممکنه در مواردی خطا دریافت کنید)
تقویم PersianCalendar فقط عمل تبدیل رو انجام میده و خروجیش فقط و فقط از نوع String است.

این هم از نقاط ضعف Janus است که تکست وارد نمیکنه ( البته من کار نکردم !)

alimooghashang
سه شنبه 04 مهر 1391, 16:54 عصر
در دات نت 4 و پایینتر که DateTime فقط و فقط تاریخ های میلادی رو درون خودش نگاه میداره .
در حقیقت شی DateTime مقادیر ورودی رو وارسی می کنه تا مطمئن بشه تاریخ از نظر میلادی Valid باشه.
به همین دلیل هم نمیشه تاریخ های شمسی رو توش جا داد ( ممکنه در مواردی خطا دریافت کنید)
تقویم PersianCalendar فقط عمل تبدیل رو انجام میده و خروجیش فقط و فقط از نوع String است.

این هم از نقاط ضعف Janus است که تکست وارد نمیکنه ( البته من کار نکردم !)
چرا String داره، منتها مشکل اینجاست که برای دسته بندی کردن داخل جانوس باید از نوع DateTime باشه که بشه مثلا به صورت روزانه ماهانه و سالیانه گروه بندی کرد! که با String این کار رو نمیشه کرد!


من یه سوال دارم
میشه گفت System.DateTime که از این مدل تاریخ استفاده کنه؟ مشکل اینجاس که ماه های میلادی و شمسی تعداد روز هاشون یکی نیست
مثلا اگه بشه به System.DateTime یه جوری Override کرد که تعداد روز های ماه ات اینه، فکر کنم مشکل حل بشه! منتها نمیدونم چطوری باید این کار رو بکنم!
ممنون

Y_Safaiee
سه شنبه 04 مهر 1391, 17:09 عصر
سلام دوست من

من با شرط گذاری روی دستور Sql این مشکلو حل میکنم مثلا اگه قرار از نزدیکترین تاریخ تا قدیمی ترین تاریخ نمایش داده شه اینو مینویسم (از صعودی به نزولی)


SqlDataAdapter da = new SqlDataAdapter("select * from list order by TarikhSabt desc", cnn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


اگه بخوام بین دوتاریخ سرچ کنم :


cnn.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from list where TarikhSabt>='" + textBox1.Text +"' and TarikhSabt <='" + textBox2.Text +"'", cnn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


فیلد تاریخمم همیشه nvarchar میذارم تا مشکل روزهای میلادی و شمسی نداشته باشه.

موفق باشی
بایت بایت

alimooghashang
سه شنبه 04 مهر 1391, 17:28 عصر
سلام دوست من

من با شرط گذاری روی دستور Sql این مشکلو حل میکنم مثلا اگه قرار از نزدیکترین تاریخ تا قدیمی ترین تاریخ نمایش داده شه اینو مینویسم (از صعودی به نزولی)


SqlDataAdapter da = new SqlDataAdapter("select * from list order by TarikhSabt desc", cnn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


اگه بخوام بین دوتاریخ سرچ کنم :


cnn.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from list where TarikhSabt>='" + textBox1.Text +"' and TarikhSabt <='" + textBox2.Text +"'", cnn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


فیلد تاریخمم همیشه nvarchar میذارم تا مشکل روزهای میلادی و شمسی نداشته باشه.

موفق باشی
بایت بایت

سلام
ممنون
ولی مشکل من این نیست که شما گفتید