Получить дату, эквивалентную текущему дню прошлого года? - PullRequest
3 голосов
/ 24 июля 2010

Я пытаюсь найти способ получить дату соответствующего дня из прошлого года,

, например, сегодня четвертая пятница июля, какой будет та же дата в прошлом году?

Я получаю продажи от ресторана, и мне нужно сравнить их с прошлогодними продажами в тот же день.

Ответы [ 3 ]

3 голосов
/ 24 июля 2010

Проблема, как указано, не имеет ответа, потому что месяцы начинаются в разные дни в разные годы (не говоря уже о осложнениях високосного года).

Было бы достаточно просто вычесть 364 дня, это ровно 52 недели, чтобы у вас был один и тот же день недели?

1 голос
/ 24 июля 2010

Если то, что вы ищете, это n-й конкретный день недели месяца в году, этот код может помочь:

using System;

class NthWeekDayOfMonth
{
    public
    NthWeekDayOfMonth(DateTime date)
    {
        this.date = date;
    }

    public
    NthWeekDayOfMonth(int n, DayOfWeek weekDay, int month, int year)
    {
        DateTime firstDayOfMonth = new DateTime(year, month, 1);
        if ( weekDay < firstDayOfMonth.DayOfWeek )
        {
            this.date = firstDayOfMonth.AddDays((n - 1) * 7 + weekDay + 7 - firstDayOfMonth.DayOfWeek);
        }
        else
        {
            this.date = firstDayOfMonth.AddDays((n - 1) * 7 + weekDay - firstDayOfMonth.DayOfWeek);
        }
    }

    public int
    Month
    {
        get { return date.Month; }
    }

    public DayOfWeek
    WeekDay
    {
        get { return date.DayOfWeek; }
    }

    public int
    N
    {
        get { return (date.Day - 1) / 7 + 1; }
    }

    public int
    Year
    {
        get { return date.Year; }
    }

    public DateTime
    Date
    {
        get { return date; }
    }

    private DateTime
    date;
}

class Program
{
    static void Main(string[] args)
    {
        for ( DateTime d = new DateTime(2010, 7, 1); d <= new DateTime(2010, 7, 31); d = d.AddDays(1) )
        {
            NthWeekDayOfMonth thisYear = new NthWeekDayOfMonth(d);
            NthWeekDayOfMonth lastYear = new NthWeekDayOfMonth(thisYear.N, thisYear.WeekDay, thisYear.Month, thisYear.Year - 1);
            Console.WriteLine("{0}th {1} of {2} in {3}: {4} - in {5}: {6}", thisYear.N, thisYear.WeekDay, thisYear.Month, thisYear.Year, thisYear.Date, lastYear.Year, lastYear.Date);
        }
    }
}
0 голосов
/ 24 июля 2010
DateTime now = DateTime.Now.Date;
DateTime sameDayLastYear = new DateTime(now.Year - 1, now.Month, now.Day);

Вы столкнетесь с проблемой високосного года, т. Е. Следующий код вызовет исключение при попытке установить дату на 2011-02-29

DateTime leapDay = new DateTime(2012, 2, 29);
DateTime sameleapDayLastYear = new DateTime(leapDay.Year - 1, leapDay.Month, leapDay.Day);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...