با سلام من میخام تاریخ شمسی که در یک تکست باکس هست که این تاریخو از persian calendar میگیره و تاریخی که کاربر در یک تکست باکس دیگه وارد میکنه رو از کاربر بگیره در بانک اطلاعاتی ذخیره کنه و بعدا بتونم تعداد روزهای بین این دو تاریخ رو بشماره ، از کسی پرسیدم گفت باید این تاریخ ابتدا به میلادی تبدیل بشه و در بانک اطلاعاتی ذخیره بشه و در هنگام خوندن از بانک اطلاعاتی باید اونو به شمسی تبدیل کنی و به کاربر نشون بدی
مشکل من فقط فهمیدن تعداد روز های بین این دو تاریخه
لطفا کمکم کنین چطور میشه تعداد روزهای بین دو تاریخ رو فهمید. اگه الگوریتمشو بگین ممنون میشم یا کامپوننتی هست که عالی میشه
زبان برنامه هم سی شارپ باشه لطفا
توصیه میشه که توی بانک اطلاعاتی تاریخ ها بصورت میلادی ذخیره بشوند، اگه این مورد رو رعایت کنید طبیعتا به
تبدیل تاریخ دو طرفه نیاز خواهید داشت.
تاریخ در کلاس DateTime ذخیره میشه، برای این کلاس فرقی نمی کنه که تاریخ شمسی یه یا قمری یا میلادی یا ...
اما موقع نمایش تاریخ با توجه به تقویم های مختلف باید از Calendar ها کمک بگیرید، مثلا GregorianCalendar
برای میلادی و PersianCalendar برای هجری شمسی
مثلا کد زیر اول تاریخ 23 ام April سال 2005 میلادی را در شیء date ذخیره می کند :
کد:
System.Globalization.GregorianCalendar gregorian = new System.Globalization.GregorianCalendar();
DateTime date = new DateTime(2005, 4, 23, gregorian);
و با استفاده از تقویم PersianCalendar ما تاریخ را بصورت هجری شمسی نمایش می دهیم :
کد:
System.Globalization.PersianCalendar persian = new System.Globalization.PersianCalendar();
string text = string.Format("{0}/{1}/{2}", persian.GetYear(date), persian.GetMonth(date), persian.GetDayOfMonth(date));
MessageBox.Show(text);
همینکار می تواند برعکس باشد، یعنی تاریخ 3 ام اردیبهشت سال 1384 را در date قرار دهیم :
کد:
System.Globalization.PersianCalendar persian = new System.Globalization.PersianCalendar();
DateTime date = new DateTime(1384, 2, 3, persian);
و با استفاده از تقویم GregorianCalendar تاریخ را بصورت میلادی نمایش دهیم :
کد:
System.Globalization.GregorianCalendar gregorian = new System.Globalization.GregorianCalendar();
string text = string.Format("{0}/{1}/{2}", gregorian.GetYear(date), gregorian.GetMonth(date), gregorian.GetDayOfMonth(date));
MessageBox.Show(text);
از اونجایی که کلاس DateTime مستقل از تقویم است فرقی نمی کند که اختلاف تاریخ ها را را با تقویم شمسی
محاسبه کنید یا میلادی.
در مثال زیر اختلاف تاریخ 23 ام و 25 ام April سال 2005 میلادی (تعداد روز) محاسبه شده و نمایش داده می شود :
کد:
System.Globalization.GregorianCalendar gregorian = new System.Globalization.GregorianCalendar();
DateTime date1 = new DateTime(2005, 4, 23, gregorian);
DateTime date2 = new DateTime(2005, 4, 25, gregorian);
double days = date2.Subtract(date1).TotalDays;
MessageBox.Show(days.ToString());
در مثال زیر اختلاف تاریخ 3 ام و 5 ام اردیبهشت سال 1384 هجری شمسی (تعداد روز) محاسبه شده و نمایش داده می شود :
کد:
System.Globalization.PersianCalendar persian = new System.Globalization.PersianCalendar();
DateTime date1 = new DateTime(1384, 2, 3, persian);
DateTime date2 = new DateTime(1384, 2, 5, persian);
double days = date2.Subtract(date1).TotalDays;
MessageBox.Show(days.ToString());
اصل کار اینه که بتوانید یک تاریخ رو بصورت یک شیء از کلاس DateTime تبدیل کنید، بعد می توانید با خود توابع
داخل کلاس DateTime اختلافش را با هر بازه زمانی و یا شیء DateTime دیگری محاسبه کنید.
مثلا پیشبینی کنید که از امروز تا پایان سال (هجری شمسی) چند روز باقی مانده :
کد:
System.Globalization.PersianCalendar persian = new System.Globalization.PersianCalendar();
DateTime date1 = DateTime.Now.Date;
int year = persian.GetYear(date1);
DateTime date2 = new DateTime(year, 12, persian.GetDaysInMonth(year, 12), persian);
double days = date2.Subtract(date1).TotalDays;
MessageBox.Show(days.ToString());