Zukiari Ответов: 5

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


Привет,
Я хочу получить номер недели даты. Для 04-11-2012 года номер недели равен 1, а для 11-11-2012 года-2. пожалуйста, кто-нибудь мне поможет.
Спасибо.

OriginalGriff

Это может быть довольно сложно - стандарт ISO не определяет, когда дата находится в какой неделе (как это происходит для номера недели года), поэтому в определенной степени это будет зависеть от того, какие правила вам нужно применить.
В какой день недели начинается ваша неделя? Сб, Вс или ПН?
Всегда ли 1-е число месяца приходится на первую неделю? Или он следует правилу недели года и зависит от даты четверга?

5 Ответов

Рейтинг:
38

MT_

Что ж,
Вам действительно не нужно писать много кода или делать вычисления для этого. Вы можете использовать
Система.Глобализация.CultureInfo.Объект "календарь". У него есть метод GetWeekOfYear.

System.Globalization.CultureInfo cult_info = System.Globalization.CultureInfo.CreateSpecificCulture("no");

System.Globalization.Calendar cal = cult_info.Calendar; 
    
int weekCount = cal.GetWeekOfYear(date, cult_info.DateTimeFormat.CalendarWeekRule, cult_info.DateTimeFormat.FirstDayOfWeek);


Проверять http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx[^]

Надеюсь, это поможет. Если это так, то отметьте ответ как решение/upvote.

Спасибо
Милинд


Zukiari

Здесь я получаю неделю нет в году. Мне нужно на месяц.
Спасибо

Рейтинг:
36

Sanjay K. Gupta

DateTime dt=DateTime.Now;//yourdatetime
int weekOfMonth=(dt.Day + ((int)dt.День недели)) / 7 + 1;


Thomas Daniels

Хороший ответ, +5!

OriginalGriff

Итак, на какой неделе в этом году 4 декабря? :смеяться:

OriginalGriff

Извините, но это не очень хорошее решение.
Для вашего решения 4 декабря 2012 года находится на неделе 1, где календарь, вероятно, поместит его на неделю 2...

Извините, но это 1 от меня.

Sanjay K. Gupta

Да, вы правы.
может быть, это и есть решение проблемы
(dt.Day + ((int)dt.День недели)) / 7 + 1

Zukiari

Это становится правильным. Могу ли я считать неделю с понедельника, то есть для 07-01-2013 это вторая неделя, но 1 - й понедельник месяца. Я хочу получить номер " нет " как 1.

Sanjay K. Gupta

Согласно OriginalGriff, первый день недели может отличаться от культуры к культуре.
Вы можете попробовать приведенное ниже решение.

Zukiari

Как я это получу?

Рейтинг:
2

NayanRana

Избыточный код с точным решением, как показано ниже метод/функция на основе пройденной даты,

private static int GetWeekNumberOfMonth(DateTime date)
       {
           // One Solution
           decimal numberofday = date.Day;
           decimal d = (Math.Floor(numberofday / 7)) + 1;

           if ((numberofday) % 7 == 0)
           {
              return Convert.ToInt32((d)) - 1;
           }
           return Convert.ToInt32(d);

       }


CHill60

Одно предупреждение - вы получите лучший прием, когда будете публиковать решения для старых сообщений, подобных этому, если вы объясните немного больше о том, почему ваше решение лучше, чем другие.
Что - то вроде этого сделало бы это - "Обратите внимание с другими решениями, что 7-е, 14-е, 21-е и 28-е числа каждого месяца возвращаются как неделя 2, 3, 4 и 5 вместо 1, 2, 3, 4. эта корректировка служит для этого"

Рейтинг:
12

Zukiari

Приведенный ниже код дает результат, который я точно хочу.

if (dtime.Day <= 7)
        {
            count = 1;
        }
        else if (dtime.Day > 7 && dtime.Day <= 14)
        {
            count = 2;
        }
        else if (dtime.Day > 14 && dtime.Day <= 21)
        {
            count = 3;
        }
        else if (dtime.Day > 21 && dtime.Day <= 28)
        {
            count = 4;
        }
        else if (dtime.Day > 28)
        {
            count = 5;
        }


Спасибо.


Рейтинг:
0

Member 10748738

Private Function WeekNumberOfMonth(ByVal Dt As Date) As Integer
       Dim weekNumber As Integer = Math.Floor(Dt.Day / 7) + 1
       Return weekNumber
   End Function


Автор: Элиан Фернандес