C#: Как получить предыдущий год и предыдущий месяц за определенный период времени?

Используя C#, я хочу сравнить текущую неделю с тем же периодом на прошлой неделе. Например, если сегодня среда, и если первым днем ​​недели является воскресенье, то я хочу сравнить итоги за воскресенье - вторник этой недели с воскресеньем - вторником прошлой недели. Я не считаю среду, потому что у меня нет полного дня данных до полуночи того же дня.

То же самое относится к сравнению этой Mtd с тем же числом дней в прошлом месяце и в прошлом году. Например, если текущая дата 19 июня, я хочу сравнить данные с 1 по 18 мая прошлого месяца, а также с 1 января по 18 июня прошлого года с 1 января по 18 июня этого года.

Переменные, которые я пытаюсь использовать, выглядят так:

//Current dates
DateTime currentDte = DateTime.Now;
DateTime beginWeek = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);
DateTime beginMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
DateTime beginYear = new DateTime(DateTime.Now.Year, 1, 1);

//Historical dates
DateTime lastWeekToDate = DateTime.Now.StartOfWeek(DayOfWeek.Sunday - (7 - (int)DateTime.Now.DayOfWeek));
DateTime lastMonthToDate =
DateTime lastYearToDate =

Как видите, я вычислил текущие даты и могу просмотреть их, чтобы получить нужные мне данные о wtd, mtd и ytd. И мне удалось выяснить, как получить последнюю нужную мне неделю.

Но я не знаю, как получить нужные мне даты lastMonthToDate и lastYearToDate. Я перепробовал все, что мог придумать. Я читал документацию по дате, пока мои глаза не болят, и все же я придумываю гусиные яйца. Кто-нибудь может предложить какие-либо предложения?

2 ответа

Решение

Если я правильно понимаю ваш вопрос, вам просто нужно использовать AddMonths а также AddYears,

DateTime lastMonthToDate = beginMonth.AddMonths(-1);
DateTime lastYearToDate  = beginYear.AddYears(-1);

РЕДАКТИРОВАТЬ

Исходя из вашего комментария - похоже, вы хотите вычесть месяцы / годы из текущей даты, в этом случае это будет

DateTime lastMonthToDate = currentDte.AddMonths(-1);
DateTime lastYearToDate  = currentDte.AddYears(-1);

Если вас отталкивает время, просто используйте часть даты DateTime.Now.Date.AddMonths(-1)

Основываясь на отзывах, которые я получил от Zeph, я смог получить начало прошлого года, используя этот код:

DateTime startDate = beginYear.AddYears(-1); 

Теперь я могу подсчитать все необходимые данные ytd на основе интервальных дат. Большое спасибо!

Другие вопросы по тегам