Как получить дату дня за неделю в C#

#c#

#c#

Вопрос:

Я пытаюсь получить дату определенного дня на основе его последовательности за неделю, например

  GetDate(22, 4);
  

который должен возвращать дату 4-го дня в 22-й недели текущего года. Как я могу это сделать?

 void Main()
{
    int months;
    var year = DateTime.Now.ToString("yyyy");
    months = GetWeeksInYear( Convert.ToInt32(year));
    Console.WriteLine(months);
}

public int GetWeeksInYear(int year)
{
      DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
      DateTime date1 = new DateTime(year, 12, 31);
      Calendar cal = dfi.Calendar;
      return  cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);    
}

public int GetDate(int weekNo, int dayNo)
{
  return // Date
}
  

Комментарии:

1. Вы, вероятно, хотите public DateTime GetDate , а не int как возвращаемый тип.

2. Вам нужен год, по крайней мере, из-за високосных лет. Я бы, вероятно, нашел, какое значение GetDate(1,1) должно возвращаться, а затем добавил 21 * 7 3 к нему дни.

3. Рассматриваете ли вы «недели» как полную неделю (с воскресенья по субботу или культурные различия) или как набор из 7 дней? т. Е. Следует GetDate(1, 1); возвращать первое воскресенье (или что-то еще) года, или оно всегда должно возвращаться 1 января?

Ответ №1:

Вы можете просто добавить количество дней с начала года:

 var dt = new DateTime(year, 1, 1);
dt = dt.AddDays(weekNo * 7   dayNo);
var date = dt.Date;
  

Ответ №2:

Я думаю, что простым способом было бы взять 1 января года и добавить количество дней,

 DateTime day = new DateTime(year, 1, 1).AddDays((week * 7)   days);
  

Ответ №3:

во-первых, неделя года — это календарное вычисление и зависящее от локали значение, поэтому вы должны учитывать это при указании номера недели… Таким образом, вам наверняка не хватает использования чего-то вроде

 CultureInfo.CurrentCulture.Calendar;