У меня есть код 2014P07W4
который означает:
2014
= год
P07
= 7-й месяц года
W4
= 4-я неделя месяца.
Я хотел бы уточнить дату первого дня 4-й недели в июле 2014 года. В этом примере я ожидаю увидеть дату 21/7/2014.
Июль 2014 недели
Из кода, который я знаю неделю no = 4, я хочу рассчитать дату 21/7/2014. Я предполагаю, что первый день недели - понедельник
Я спрашиваю, как прочитать этот код и получить первый день недели, указанный
Надеюсь, что это яснее, это был долгий день
Вам нужно разобрать код и извлечь год, месяц и неделю. Нет чисел. Затем вы можете использовать этот метод, чтобы получить начальный день недели:
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;
}
Возьмите первый день месяца (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);
возможно, это будет работать
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));
}