سلام
این متد ، دوتا پارامتر میگیره ، اولی تاریخ میلای که مبنای سال مورد محاسبه هست و پارامتر دوم هم همون شماره روز که بهش اشاره کردین ، خروجیش هم تاریخ مورد نظر به شمسی هست
private string GetDateByDay(DateTime date, int dayNumber)
{
var persianCalendar = new PersianCalendar();
#region throw exception on wrong day number input
if (!persianCalendar.IsLeapYear(persianCalendar.GetYe ar(date)) && (dayNumber < 1 || dayNumber > 365))
throw new Exception("Invalid Day Number");
if (persianCalendar.IsLeapYear(persianCalendar.GetYea r(date)) && (dayNumber < 1 || dayNumber > 366))
throw new Exception("Invalid Day Number");
#endregion
var targetDate = persianCalendar.ToDateTime(persianCalendar.GetYear (date), 1, 1, 0, 0, 0, 1).AddDays(dayNumber - 1);
return $"{persianCalendar.GetYear(targetDate)}/{persianCalendar.GetMonth(targetDate):D2}/{persianCalendar.GetDayOfMonth(targetDate):D2}";
}
این هم یک شکل دیگه هست ، با این تفاوت که سال شمسی رو بعنوان پارامتر اول میگیره (سال به صورت 4 رقمی) و بقیه موارد مثل متد بالا هست
private string GetDateByDay(int shamsiYear, int dayNumber)
{
var persianCalendar = new PersianCalendar();
#region throw exception on wrong day number input
if (!persianCalendar.IsLeapYear(shamsiYear) && (dayNumber < 1 || dayNumber > 365))
throw new Exception("Invalid Day Number");
if (persianCalendar.IsLeapYear(shamsiYear) && (dayNumber < 1 || dayNumber > 366))
throw new Exception("Invalid Day Number");
#endregion
var startdate = persianCalendar.ToDateTime(shamsiYear, 1, 1, 0, 0, 0, 1).AddDays(dayNumber - 1);
return $"{persianCalendar.GetYear(startdate)}/{persianCalendar.GetMonth(startdate):D2}/{persianCalendar.GetDayOfMonth(startdate):D2}";
}
استفادش هم که به اینصورت میشه
مورد اول
var result = GetDateByDay(DateTime.Now, days);
مورد دوم
var result = GetDateByDay(1397, days);