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 на основе интервальных дат. Большое спасибо!