Получить дату начала и окончания данной недели года, данного месяца и данной недели - PullRequest
6 голосов
/ 29 июля 2011

Как я могу получить дату начала и окончания данного года (int), месяца (int) и недели (int) {пример Год: 2011 Месяц: 07 неделя: 04} в c # 4.0? Заранее спасибо.

Дата начала года 2011 Месяц 07 и номер недели месяца 04.

Ответы [ 5 ]

9 голосов
/ 29 июля 2011

Google - ваш друг.

Месяцы:

public DateTime FirstDayOfMonthFromDateTime(DateTime dateTime)
{
   return new DateTime(dateTime.Year, dateTime.Month, 1);
}


public DateTime LastDayOfMonthFromDateTime(DateTime dateTime)
{
   DateTime firstDayOfTheMonth = new DateTime(dateTime.Year, dateTime.Month, 1);
   return firstDayOfTheMonth.AddMonths(1).AddDays(-1);
}

Вы можете делать что-то подобное годами:

   DateTime time = new DateTime(2011,1,1);
   time.AddYears(1).AddDays(-1);

И week необходимо использовать CultureInfo.FirstDay (или все, что вы хотите установить в качестве первого дня недели, в некоторых странах это понедельник, иногда воскресенье).

/// <summary>
    /// Returns the first day of the week that the specified
    /// date is in using the current culture. 
    /// </summary>
    public static DateTime GetFirstDayOfWeek(DateTime dayInWeek)
    {
        CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture;
        return GetFirstDateOfWeek(dayInWeek, defaultCultureInfo);
    }

    /// <summary>
    /// Returns the first day of the week that the specified date 
    /// is in. 
    /// </summary>
    public static DateTime GetFirstDayOfWeek(DateTime dayInWeek, CultureInfo cultureInfo)
    {
        DayOfWeek firstDay = cultureInfo.DateTimeFormat.FirstDayOfWeek;
        DateTime firstDayInWeek = dayInWeek.Date;
        while (firstDayInWeek.DayOfWeek != firstDay)
            firstDayInWeek = firstDayInWeek.AddDays(-1);

        return firstDayInWeek;
    }
0 голосов
/ 29 июля 2011

Расчеты DateTime, поскольку они немного сложны, с некоторыми предположениями, которые я мог бы придумать с этим

//assign it to the first day of the month
DateTime getweek = new DateTime(2011, 4, 1);
// say the week starts on a Sunday
while (getweek.DayOfWeek != DayOfWeek.Sunday)
      getweek = getweek.AddDays(1);
DateTimeFormatInfo info = DateTimeFormatInfo.CurrentInfo;            
Calendar cal = info.Calendar;
//Now you are on the first week add 3 more to move to the Fourth week
DateTime start = cal.AddWeeks(getweek, 3); // 24 April 2011
DateTime end = start.AddDays(6); // 30 April 2011
0 голосов
/ 29 июля 2011

Вы также можете использовать

DateTime.DaysInMonth(int year,int month);

, чтобы понять это.Недели будут более трудными.

0 голосов
/ 29 июля 2011

При условии, что вы начинаете с недели 1:

var startDate = new DateTime(year, month, 1).AddDays((week - 1) * 7);
var endDate = startDate.AddDays(6);
0 голосов
/ 29 июля 2011

Не уверен, но это то, что вы ищете?

var weekStart = new DateTime(year, month, 1).AddDays(week * 7);
var weekEnd = weekStart.AddDays(6);
...