рассчитать месяц от недели нет - PullRequest
2 голосов
/ 10 мая 2011

я получаю номер недели из базы данных, нужно рассчитать, какая это неделя месяца.

Например:

week no = 7 month = 2

week no 11 month = 3

Как рассчитать ??

Чтобы добавить, у меня также есть значение года с номером недели.

Ответы [ 6 ]

4 голосов
/ 10 мая 2011

Хорошо, я пойду, но это не очень красиво:

public int MonthOfWeek( int week, int year, CalendarWeekRule, weekrule, DayOfWeek firstDayOfWeek)
{
  GregorianCalendar gc = new GregorianCalendar();
  for( DateTime dt = new DateTime(year, 1, 1); dt.Year == year; dt = dt.AddDays(1))
  {
    if( gc.GetWeekOfYear( dt, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday) == week ){
      return dt.Month;
    }
  }
  return -1;
}  

Это учитывает специфические для культуры правила генерации недель.Если неделя делится на два, она возвращает первый месяц, с которым она столкнулась.

Поэтому в Норвегии я бы назвал это с CalendarWeekRule.FirstFourDayWeek и DayOfWeek.Monday для получения правильных результатов.

2 голосов
/ 10 мая 2011

Рассчитать дату по номеру недели:

Рассчитать дату по номеру недели

Получить WeekOfMonth:

Рассчитать неделю месяца в.NET

2 голосов
/ 10 мая 2011

Предполагая, что вы ищете месяц в данном году:

var dtYearStart = new DateTime(DateTime.Now.Year, 1, 1);
CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture;

// Check for the starting date of the initial week.
int diff = dtYearStart.DayOfWeek - defaultCultureInfo.DateTimeFormat.FirstDayOfWeek;
if (diff < 0)
{
 diff += 7;
}

dtYearStart = dtYearStart.AddDays(-1 * diff).Date;

int weekNo = 15;

DateTime dtWeekBased = dtYearStart.AddDays((weekNo-1) * 7);
string strMonth  = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dtWeekBased.Month);
0 голосов
/ 14 мая 2011

Здесь решение с использованием библиотеки Time Period для .NET :

// ----------------------------------------------------------------------
public int GetMonthOfWeek( int weekOfYear )
{
  return new Week( weekOfYear ).FirstDayStart.Month;
} // GetMonthOfWeek
0 голосов
/ 10 мая 2011

4 недели = 1 месяц, поэтому используйте

неделя% 4

его возврат вам нет месяца

0 голосов
/ 10 мая 2011

Используя DateTime, вы можете умножить номер недели на 7, получить общее количество дней за год, добавить эти дни к 31/12 / гггг-1 и получить месяц из полученного DateTime.

Я надеюсь, что это будет полезно для вас.

Увидимся.

...