قضیه یک مقدار با آن چیزی که فکر می کنید فرق می کنه، DateTime بدون توجه به تقویم تاریخ و زمان را نگهداری می کنه، کاری نداره که
تقویم سیستم چیه، حالا اگر تقویم پیشفرض سیستم میلادی باشه که معمولا هست موقع نمایش میلادی نشون اش میده، اما به هر حال
تاریخ تاریخه و DateTime یکی و یک نوع بیشتر نیست. یعنی فرضا اگر در DateTime تاریخ رو به میلادی بدهید در همان لحظه DateTime
می تونه با هر تقویمی تاریخ رو اعلام کنه، صرفا باید تقویم مقصد رو مشخص کنید.
شما اگر می خواهید تاریخ به شمسی تبدیل بشه، DateToPersian به شمسی تبدیلش می کنه، بدون اینکه کاری داشته باشه که تقویم
پیشفرض سیستم میلادی یه یا قمری یا ... فقط نتیجه مهمه که توسط PersianCalendar به شمسی تبدیل میشه.
اگر می خواهید صریحا مقداری مثل "3/16/2005" رو از تقویم میلادی بگیرید و به شمسی تبدیل کنید، صرفا تابعی لازم دارید که همیشه از تقویم
میلادی استفاده کنه :
private DateTime GregorianToDate(string s)
{
System.Globalization.GregorianCalendar gregorian
= new System.Globalization.GregorianCalendar();
string[] p = s.Split('/');
return gregorian.ToDateTime(int.Parse(p[2]), int.Parse(p[0]), int.Parse(p[1]), 0, 0, 0, 0);
}
private string DateToGregorian(DateTime d)
{
System.Globalization.GregorianCalendar gregorian
= new System.Globalization.GregorianCalendar();
return string.Format("{0:00}/{1:00}/{2}"
, gregorian.GetMonth(d), gregorian.GetDayOfMonth(d), gregorian.GetYear(d));
}
اگر خواستید بین شمسی و میلادی تبدیلی انجام بدهید اول ورودی رو به DateTime تبدیل اش کنید که بین هر دو مشترکه،
DateTime شمسی و قمری و میلادی سرش نمیشه، تاریخ رو نجومی و خیلی دقیق نگهداری می کنه.
مثلا :
private void Form1_Load(object sender, EventArgs e)
{
DateTime d = GregorianToDate("3/16/2005");
string s = DateToPersian(d);
string t = DateToGregorian(DateTime.Now);
}