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

Я хочу найти дату, которая сейчас находится на номере недели с настольным приложением С#.

Я искал в Google, но ни один из них не соответствовал моим потребностям.

Как получить неделю в месяце, как в примере ниже?

Пример:

Я хочу 6 января 2014 года = первая неделя января

30 января 2014 г. = week четвертого января.

но 1 февраля 2014 г. = 4 неделя января

а 3 февраля 2014 года было первой неделей февраля.


person Enkhay    schedule 14.04.2014    source источник
comment
Какой первый день недели? И какой номер недели 1 января 2014 года?   -  person Ulugbek Umirov    schedule 14.04.2014
comment
Итак, ваше определение: неделя 1 начинается с первого понедельника месяца до следующего воскресенья?   -  person Damien_The_Unbeliever    schedule 14.04.2014
comment
Первый результат Google, который вы можете получить: geekpedia. com/code72_Get-the-the-week-number-of-given-date.html   -  person rosko    schedule 14.04.2014
comment
Если вы можете увернуться от этого, сделайте это. Гарантированно нахмурить брови везде это.   -  person Tony Hopkinson    schedule 14.04.2014


Ответы (4)


Вот метод:

static int GetWeekNumberOfMonth(DateTime date)
{
    date = date.Date;
    DateTime firstMonthDay = new DateTime(date.Year, date.Month, 1);
    DateTime firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7);
    if (firstMonthMonday > date)
    {
        firstMonthDay = firstMonthDay.AddMonths(-1);
        firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7);
    }
    return (date - firstMonthMonday).Days / 7 + 1;
}

Контрольная работа:

Console.WriteLine(GetWeekNumberOfMonth(new DateTime(2014, 1, 6)));  // 1
Console.WriteLine(GetWeekNumberOfMonth(new DateTime(2014, 1, 30))); // 4
Console.WriteLine(GetWeekNumberOfMonth(new DateTime(2014, 2, 1)));  // 4
Console.WriteLine(GetWeekNumberOfMonth(new DateTime(2014, 2, 3)));  // 1
person Ulugbek Umirov    schedule 14.04.2014
comment
Абсолют, это код, который я хочу. Большое спасибо @Ulugbek - person Enkhay; 14.04.2014
comment
Это не работает на 21 марта 2021 г. - person Tony; 03.04.2021

Метод вернет структуру с первой и последней датами этого квартала.

 private String test()
    {
        DateRangeStruct retVal;
        retVal.startDate = retVal.endDate = Now;
        retVal = DateRange(DateRangeOptions.Week, DateTime.Today);
    }

перейдите по этой ссылке http://nonsequiturs.com/articles/find-the-first-and-last-day-of-a-date-range-using-c-and-asp-net/

person Nayeem Mansoori    schedule 14.04.2014

Я думаю, это то, что вы хотите:

public static int GetWeekOfMonth(DateTime date)  
{  
    DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1);  

    while (date.Date.AddDays(1).DayOfWeek != CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)  
        date = date.AddDays(1);  

    return (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays  / 7f) + 1;  
} 

Его автором является Дэвид М. Мортон на http://social.msdn.microsoft.com/Forums/vstudio/en-US/bf504bba-85cb-492d-a8f7-4ccabdf882cb/get-week-number-for-месяц

person rosko    schedule 14.04.2014
comment
Этот код вычисляет количество недель независимо от того, была ли первая дата понедельником или нет. Я хочу, чтобы первый понедельник каждого месяца был первой неделей месяца. Например, если 1 января, а не понедельник, то есть 1 января, включая последнюю неделю предыдущего месяца. - person Enkhay; 14.04.2014

person    schedule
comment
Ему нужен номер недели месяца, а не года. - person Ulugbek Umirov; 14.04.2014
comment
Интересный фрагмент кода, но он вернет неделю -год-, а не месяц. Кроме того, остерегайтесь FirstFourDayWeek, который может привести к автоматическому результату. - person AFract; 14.04.2014
comment
результат равен 16, если я использую datetime.now, я хочу, чтобы мой пример получал неделю за месяцем. Я хочу 6 января 2014 года = первая неделя января. 30 января 2014 г. = четвертая неделя января. но 1 февраля 2014 г. = 4 неделя января. а 3 февраля 2014 г. была первой неделей февраля. - person Enkhay; 14.04.2014
comment
@Enkhay Да, неправильно понял ваш вопрос, может быть, вы можете добавить какой-нибудь код, чтобы вернуть неделю месяца, вероятно, теперь вы получите отрицательные голоса. - person Sajeetharan; 14.04.2014
comment
Dim WeekNumber As Integer = GetWeekNumber(MyDate) - GetWeekNumber(LastDayLastMonth) - person masteroleary; 01.10.2015