Календарь работает. Но, не сходится нужная строка с датой. Не могу найти в чем проблема. На картинке видно проблему.
void DrowMiniCalendar(DateTime selectedDate)
{
int posX = 43, posY = 19;
string[,] days = new string[6, 7];
int week = 0;
int dayOfWeek = (int)FirstDayOfMonth(selectedDate).DayOfWeek - 1;
if (dayOfWeek == -1) dayOfWeek = 6;
int daysInMonth = LastDayOfMonth(selectedDate).Day;
for (int day = 1; day <= daysInMonth; ++day)
{
days[week, dayOfWeek] = $"{day,2}";
++dayOfWeek;
if (dayOfWeek == 7)
{
++week;
dayOfWeek = 0;
}
}
for (int row = 0; row < 6; ++row)
{
for (int column = 0; column < 7; ++column)
{
Console.SetCursorPosition(posX + column * 4, posY + row * 2);
Console.Write(days[row, column] ?? " ");
}
}
DrowCurrentDayMiniCalendar(selectedDate);
}
void DrowCurrentDayMiniCalendar(DateTime selectedDate)
{
int posX = 42, posY = 18;
int column = (int)selectedDate.DayOfWeek - 1;
if (column == -1) column = 6;
int row = (selectedDate.Day + (int)FirstDayOfMonth(selectedDate).DayOfWeek - 2) / 7;
Console.SetCursorPosition(posX + column * 4, posY + row * 2);
Console.Write("┌──┐");
Console.SetCursorPosition(posX + column * 4, posY + 1 + row * 2);
Console.Write("│");
Console.SetCursorPosition(posX + 3 + column * 4, posY + 1 + row * 2);
Console.Write("│");
Console.SetCursorPosition(posX + column * 4, posY + 2 + row * 2);
Console.Write("└──┘");
}
Проблема в том, что в рассчете строки для курсора вы переводите день недели из enum в int напрямую
(int)FirstDayOfMonth(selectedDate).DayOfWeek
А в C# используется неделя в формате даты США, когда она начинается с Воскресенья
0 - Воскресенье
1 - Понедельник
2 - Вторник
...
И если в рассчете столбца вы это учитываете
if (dayOfWeek == -1) dayOfWeek = 6;
То в рассчете строки - нет
int row = (selectedDate.Day + (int)FirstDayOfMonth(selectedDate).DayOfWeek - 2) / 7;
Замените рассчет row
в DrowCurrentDayMiniCalendar
на
int firstDayOfWeek = FirstDayOfMonth(selectedDate).DayOfWeek - 1;
if (firstDayOfWeek == -1) firstDayOfWeek = 6;
int row = (selectedDate.Day + firstDayOfWeek - 1) / 7
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пишу парсер для сайта https://kladr-rfru/ 1) нужно получить все города со всех регионов и улицы со всех городов, данные о городах и улицах спарсил 2) далее...