PDA

View Full Version : بدست آوردن تاریخ از چندین روز سال



mehdi0020
دوشنبه 02 مهر 1397, 11:46 صبح
تاحالا خیلی سوال و توضیح در مورد چندین روز سال دیدن
اما من برعکس این سوال دارم یک عدد دارم میخوام بدونم تاریخ اون چی میشه
مثلا 196 روز سال چه تاریخی میشه؟

mehdi0020
دوشنبه 02 مهر 1397, 13:28 عصر
دوستان کسی نیست به من کمک کنه؟
من با شماره هفته یا روز چطور میتونم تاریخ اون هفته یا اون روز پیدا کنم؟؟؟؟

Mahmoud Zaad
دوشنبه 02 مهر 1397, 13:40 عصر
سلام
این نمونه (https://stackoverflow.com/questions/21960499/how-to-get-date-from-day-of-year) برای تاریخ میلادی

mehdi0020
دوشنبه 02 مهر 1397, 14:58 عصر
سلام
این نمونه (https://stackoverflow.com/questions/21960499/how-to-get-date-from-day-of-year) برای تاریخ میلادی

int a = 53; // This is the day of year value, that I got previously
string b = Convert.ToDateTime(a).ToString(); // Trying to get the date
از این کد استفاده کردم خطا میده
Invalid cast from 'Int32' to 'DateTime'.

Mahmoud Zaad
دوشنبه 02 مهر 1397, 15:10 عصر
این سوال یه بنده خدایی بوده که مشکل داشته، جواب اون پستی هست که تیک خورده.

محمد آشتیانی
دوشنبه 02 مهر 1397, 19:11 عصر
سلام
این متد ، دوتا پارامتر میگیره ، اولی تاریخ میلای که مبنای سال مورد محاسبه هست و پارامتر دوم هم همون شماره روز که بهش اشاره کردین ، خروجیش هم تاریخ مورد نظر به شمسی هست

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);

mehdi0020
سه شنبه 03 مهر 1397, 08:49 صبح
سلام
این متد ، دوتا پارامتر میگیره ، اولی تاریخ میلای که مبنای سال مورد محاسبه هست و پارامتر دوم هم همون شماره روز که بهش اشاره کردین ، خروجیش هم تاریخ مورد نظر به شمسی هست

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);

با سلام ضمن تشکر از پاسخ کاملتون اگر انکان داره در مورد دستور return یه توضیح مختصر بدید از $ خطا میگیره

danialafshari
سه شنبه 03 مهر 1397, 16:53 عصر
با سلام ضمن تشکر از پاسخ کاملتون اگر انکان داره در مورد دستور return یه توضیح مختصر بدید از $ خطا میگیره

کاراکتر $ یکی از ویژگی های خوب C# 6 هست
میتونید به شکل زیر هم تغییرش بدید

return string.Format(@"{0}/{1}/{2}", persianCalendar.GetYear(startdate), persianCalendar.GetMonth(startdate).ToString("00"), persianCalendar.GetDayOfMonth(startdate).ToString("00"));

موفق باشید