Получение конкретной даты с использованием текущей даты в качестве ссылки - PullRequest
0 голосов
/ 27 октября 2011

Я хочу получить две конкретные даты, используя текущую дату, позвольте мне объяснить подробнее.

Например, если сегодня 27.10.2011, то я бы хотел получить 01.07.2011 и 9 /30/2011.Обратите внимание, что это трехмесячный период (исключая текущий месяц). Как я могу это сделать?

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

    TimeSpan TSFrom = new TimeSpan(90 + DateTime.Now.Day, 0, 0, 0, 0);
    TimeSpan TSTo = new TimeSpan(DateTime.Now.Day, 0, 0, 0, 0);
    Response.Write(DateTime.Now.Subtract(TSFrom).ToShortDateString());
    Response.Write(DateTime.Now.Subtract(TSTo).ToShortDateString());

Этот код возвращает эти значения

7/2/2011 - 9/30/2011

, в то время как его некоторые, что приемлемо, все еще выглядиткак не идеальный способ пойти и посмотреть, что первое свидание начинается со второго дня месяца, в то время как оно должно начинаться с первого дня, я думаю, что это потому, что некоторые месяцы заканчиваются 29, а некоторые - 30. Так как я могу получить идеальные даты?с 01.07.2011 по 30.09.2011.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 27 октября 2011
var now = DateTime.Now;
var end = new DateTime(now.Year, now.Month, 1).AddDays(-1); // Last day of previous month
var start = new DateTime(now.Year, now.Month, 1).AddMonths(-3); // First day of third-last month

(Вы можете хранить new DateTime(now.Year, now.Month, 1) в локальной переменной, это вопрос личного вкуса, я думаю ...)

1 голос
/ 27 октября 2011
var fromWithDay = DateTime.Today.AddMonths(-3);
var from = new DateTime(fromWithDay.Year, fromWithDay.Month, 1);
var toWithDay = DateTime.Today;
var to = new DateTime(toWithDay.Year, toWithDay.Month, 1).AddDays(-1);

Может быть даже короче, но менее читабельным

1 голос
/ 27 октября 2011
DateTime now = DateTime.Today;
DateTime firstOfMonth = now.AddDays(-now.Day + 1);
DateTime beginning = firstOfMonth.AddMonths(-3);
DateTime end = firstOfMonth.AddDays(-1);

Мы «откатываемся» к началу месяца, вычитая (текущий день - 1), конец периода - firstOfMonth.AddDays(-1);, начало периода - firstOfMonth.AddMonths(-3);

0 голосов
/ 27 октября 2011
DateTime now = DateTime.Now;
DateTime firstDayOfThisMonth = new DateTime(now.Year, now.Month, 1);
DateTime startDate = firstDayOfThisMonth.AddMonths(-3);
DateTime endDate = firstDayOfThisMonth.AddDays(-1);
Console.WriteLine(startDate);
Console.WriteLine(endDate);
...