Получить номер недели месяца

1

У меня есть код 2014P07W4 который означает:

2014= год

P07= 7-й месяц года

W4= 4-я неделя месяца.

Я хотел бы уточнить дату первого дня 4-й недели в июле 2014 года. В этом примере я ожидаю увидеть дату 21/7/2014.

Июль 2014 недели

  • Неделя 1 - 1-6
  • Неделя 2 - с 7 по 13
  • Неделя 3 - 14-20
  • Неделя 4 - 21-27
  • Неделя 5 - 28-31

Из кода, который я знаю неделю no = 4, я хочу рассчитать дату 21/7/2014. Я предполагаю, что первый день недели - понедельник

Я спрашиваю, как прочитать этот код и получить первый день недели, указанный

Надеюсь, что это яснее, это был долгий день

Теги:
date

3 ответа

1
Лучший ответ

Вам нужно разобрать код и извлечь год, месяц и неделю. Нет чисел. Затем вы можете использовать этот метод, чтобы получить начальный день недели:

int WeekStartDay(int year, int month, int weekNo)
{
    DateTime monthStart = new DateTime(year, month, 1);

    int monthStart_DayOfWeek = ((int)monthStart.DayOfWeek + 6) % 7;

    int weekStart_DayOfMonth = 1;
    if (1 < weekNo) {
        weekStart_DayOfMonth += 7 - monthStart_DayOfWeek;
    }
    if (2 < weekNo) {
        weekStart_DayOfMonth += 7 * (weekNo - 2);
    }
    return weekStart_DayOfMonth;
}
0

Возьмите первый день месяца (2014/07/01), найдите следующий понедельник (первый день 2-й недели), добавьте 14 дней (первый день 4-й недели).

DateTime date = new DateTime(2014, 7, 1);
int daysToFirstDayOf2ndWeek = date.DayOfWeek == DayOfWeek.Monday
                              ? 7
                              : ((int)DayOfWeek.Monday - (int)date.DayOfWeek + 7) % 7;
DateTime firstDayOf2ndWeek = date.AddDays(daysToFirstDayOf2ndWeek);
DateTime firstDayOf4thWeek = firstDayOf2ndWeek.AddDays(14);
0

возможно, это будет работать

    string code = "2014P07W4";
    int yr = int.Parse(code.Substring(0, 4));
    int mnth = int.Parse(code.Substring(5, 2));
    int week = int.Parse(code.Substring(8));

    DateTime dt = new DateTime(yr, mnth, 1);
    if (dt.DayOfWeek == DayOfWeek.Monday)
    {
        DateTime newdate = dt.AddDays((week - 1) * 7);
    }
    else
    {
        DateTime newdate = dt.AddDays((8 - (int)dt.DayOfWeek) % 7 + ((week - 2) * 7));
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню