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