واضح آرشیو وب فارسی:سایت ریسک: mohammad aghajani15-05-2007, 10:10 PMمی خواستم برنامه ای بنویسم مثل برنامه date and time در ویندوز ولی با این فرق که وقتی تاریخ میلادی را انتخاب می کنیم تاریخ هجری هم نمایش بدهد ممنون می شم اگه کمک کنید someone16-05-2007, 01:39 AMسلام. برای مجموعه Net. یه Library رایگان نوشته شده برای تبدیل تاریخها که میتونین از اون استفاده کنین. از لینک زیر میتونین بگیرینش : http://www.shahabfar.com/misc/persia/ mohammad aghajani19-05-2007, 01:46 AMمن این برنامه را خودم نوشتم ولی یکسری مشکل داره اگه اشکالاتشو بر طرف کنید ممنون میشم private void button1_Click(object sender, EventArgs e) { int yyy = DateTime.Now.Year; int mmm = DateTime.Now.Month; int ddd = DateTime.Now.Day; label1.Text = Convert.ToString(yyy + "/" + mmm + "/" + ddd); int y=DateTime .Now.Year ; int m=DateTime .Now .Month ; int d=DateTime .Now .Day; int yy,mm,dd; int[] a ={ 0, 10, 11, 9, 11, 10, 10, 9, 9, 9, 8, 9, 9 }; int[] b ={ 0, 30, 30, 29, 31, 31, 31, 31, 31, 31, 30, 30, 30 }; yy=y-621; if ((y%4==0)&&(m==3)&&(d>=21)) { a[3]++; b[3]++; } if (dd > b[m]) { dd -= b[m]; mm++; lbl1.Text = Convert.ToString(yy + "/" + mm + "/" + dd); } if (m >= 4) { mm = m - 3; dd = d + a[m]; lbl1.Text = Convert.ToString(yy + "/" + mm + "/" + dd); } else { yy = y - 622; mm = m + 9; dd = d + a[m]; lbl1.Text = Convert.ToString(yy + "/" + mm + "/" + dd); } } اینم فرمم http://forum.p30world.com/C:Documents and Settingsuser.SHAIFISP-55A 847My DocumentsMy Picturesuntitled 2.bmp _H2_19-05-2007, 04:11 PMسلام عجیب است که هنوز برنامه نویسات دات نت نمیدانند که کلاسس بومی System.Globalization.PersianCalendar برای تبدیلات هجری شمسی به صورت ذاتی در دات نت وجود دارد!!!! mohammad aghajani22-05-2007, 07:50 PMمن برنامه را خودم نوشتم ودرست کار میکنه فقط اشکالی که داره وقتی به روز29اسفند می رسه به بعد به جای اینکه اول فروردین را نشان دهد می نویسد1/13/1386هر کار کردم درست نشد و این اشکال تا پایان ماه march ادامه دارد ولی از اول ماه April درست می شود کد برنامه اینه: private void button1_Click(object sender, EventArgs e) { int yy= DateTime.Now.Year; int mm = DateTime.Now.Month; int dd = DateTime.Now.Day; int year = DateTime.Now.Year; int month = DateTime.Now.Month; int day = DateTime.Now.Day; int y, m, d; int[] A ={ 0, 10, 11, 9, 11, 10, 10, 9, 9, 9, 8, 9, 9 }; int[] B ={ 0, 30, 30, 29, 31, 31, 31, 31, 31, 31, 30, 30, 30 }; y = year - 621; if ((year % 4 == 0) && (month == 3) && (day >= 21)) { A[3]++; B[3]++; } if (month >= 4) m = month - 3; else m = month + 9; d = day + A[month]; if (d > B[month]) { d -= B[month]; m++; } if ((m == 10) || (m == 11) || (m == 12)) y--; shamsi.Text = Convert.ToString(y + "/" + m + "/" + d); miladi.Text = Convert.ToString(yy + "/" + dd + "/" + mm); } } } ممنون می شم جواب بدید در ضمن منم میدونم که در دات نت همچین امکاناتی وجود داره ولی می خواستم خودم برنامه اش را بنویسم. _H2_23-05-2007, 10:01 AMسلام خیلی خیلی خیلی خیلی خیلی به توان 0/1 میبخشید!!!! ولی کد شما ارزش ندارد!!!!! چاکریم! تضمین میدهم که با روش فوق اگر هم درست کار کند هیچ اعتباری برای درست کار کردن آن در سال بعد نیست، باید کبیسه های 4 ساله و 5 ساله به شدت لحاظ شوند که حتی در کدهای به ظاهر کاملی که من دیدم هیچ یک کبیسه های پنج سال را لحاظ نکرده بودند و برنامه شان بدون شک برای بعد سال سال ؟140 درست جواب نمیدهد و نیز قبل از 1370 یا حتی 1375 . الگوریتم صحیح تبدیل اصلاً اینطوری نیست، باید جور دیگری فکر کنید! آنگاه قضیه خیلی راحت و دقیق میشود! اگر میخواهید باید الگوریتم شما بر مبنای تعداد روز گذشته از مبدا باشد. یعنی تاریخ شمسی را تبدیل کنید به تعداد کل روزهای گذشته شده از اول هجرت!!!! زیاد هم سخت نیست برابر است با : تعداد روزهای گذشته شده از اول همان سال + تعداد سالهای قبل * 365 + تعداد سالهای قبلی کبیسه 4 ساله + تعداد سالهای قبلی کبیسه 5 ساله (1) بعد هم مشخص است مقدار شمسی را به علاوه اختلاف تعداد روزهای میلادی شمسی میکنید (که با یک کالیبراسیون به راحتی بدست میآید) و به همین راحتی تعداد روزهای گذشته از اول میلاد حضرت مسیح را بدست می آوردید. (2) خود دات نت در ذات تاریخ را به صورت تعداد 100 نانو ثانیه گذشته از اول میلاد نگه میدارد، در نتیجه جمع و تفریق تاریخ ها هم بدوم توجه به تعداد ثانیه در دقیقه ... روز و هزار جفنگیات دیگه ! به راحتی و سرعت تفریق و جمع دو عدد صحیح انجام میشود، و بعد در زمان نمایش تاریخ سریعاً این عدد را بع روز و ماه و سال و... تبدیل کرده و نشان میدهد. در نتیجه عددی را که در مرحله (2) بدست آورید در 10000000 * 60 * 60* 24 ضرب میکنید و حاصل تاریخ میلادی است! برای برعکی هم به همین ترتیب اول عدد ticks های تاریخ میلادی را بر 10000000 * 60 * 60 * 24 تقسیم میکنید تا به تعداد روز برسید و آن را از اختلاف تعداد روز میلادی و شمسسی کم میکنید تا به تعداد روز از اول هجرت برسید و آنگاه برعکس معادله (1) را انجام میدهید. به این سختی ها که به نظر میرسد نیست! دقیق و راحت است و با این اوصاف جمع و تفریق دو تاریخ هم واقعاً بچه گانه و سریع و البته دقیق میشود. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 4199]