Я работаю над консольным календарем в качестве учебной задачи (школы). Он должен отображать лист календаря для определенного месяца, в который пользователь вводит. Я почти там, но я заметил, что теперь все месяцы начинаются в понедельник. Я создал лист с помощью стробоскопа, и я попытался заполнить дни до того, как первый день месяца на самом деле приходит с нулями, но он пока не работает. Для петли моя попытка. У кого-нибудь есть идеи? Я все еще учусь. Вот код, который создает лист, whichs отлично работает в стороне от этого вопроса:Консольный календарь с строковым календарем
DateTime date = DateTime.Now;
List<DateTime> dateList = new List<DateTime>();
DateTime dateCopyForModification = date;
int inputMonth = date.Month;
while (dateCopyForModification.Month == inputMonth)
{
dateList.Add(dateCopyForModification);
dateCopyForModification = dateCopyForModification.AddDays(1);
}
Console.WriteLine("\t---------\n\t{0}, {1}\n\t---------", date.ToString("MMMM"), date.Year);
int dayCounter = 0;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("\nMo\t|\tDi\t|\tMi\t|\tDo\t|\tFr\t|\tSa\t|\tSo\t|\n-----------------------------------------------------------------------------------------------------\n");
foreach (DateTime dateTime in dateList)
{
//the part that doesnt work
int day = (int)dateTime.DayOfWeek;
if (dateTime == new DateTime(dateTime.Year, dateTime.Month, 1))
{
for (day = 1; day == (int)dateTime.DayOfWeek; day++)
{
stringBuilder.Append("0");
dayCounter++;
}
}
//until here
else
{
stringBuilder.Append(dateTime.Day);
dayCounter++;
}
if (dateTime.Day == 28)
{
stringBuilder.Append(" |");
}
else
{
stringBuilder.Append("\t|\t");
}
if (dayCounter == 7)
{
stringBuilder.Append("\n");
dayCounter = 0;
}
}
Console.Write(stringBuilder);
Console.ReadKey();
Я боюсь, что мне не совсем ясно, что вы пытаетесь сделать, или каков текущий результат. Не могли бы вы уменьшить это до [mcve]? Похоже, что только внутренний цикл имеет значение, но мы не можем точно сказать - конкретный пример облегчит вам помощь. –
Остальная часть кода, означая все, кроме внутреннего for-цикла и оператора if, просто создает лист календаря. У столбцов есть Mo-Fr как названия, а ниже - даты, точно так же, как календарь Windows. То, как я добавляю даты, но всегда начинается в понедельник, и я хочу подтолкнуть это к фактическому будничному дню, который является первым месяцем. Я оставлю все остальное. – tweedledum11
Чтобы понять проблему, нужна ли нам внешняя петля foreach? Можете ли вы преобразовать это в * полный * пример с жестко запрограммированной датой и в полном консольном приложении, которое мы можем скопировать, вставить, скомпилировать и запустить? Чем проще вы сделаете это для нас, чтобы воспроизвести проблему, тем легче мы сможем вам помочь. –