Получить даты первого и последнего дня предыдущего месяца в c #

Как вы заметили, downcasting работает только с Any признаком, и да, он поддерживает только данные 'static. Вы можете найти недавнюю дискуссию о том, почему здесь здесь . В принципе, реализовать отражение для ссылок на произвольные времена жизни сложно.

Также невозможно (на данный момент, по крайней мере) скомбинировать Any с вашим пользовательским признаком. Однако недавно была создана библиотека macro для автоматической реализации Any для вашей черты. Вы также можете найти здесь обсуждение .

129
задан Jeremy Boyd 26 February 2009 в 18:11
поделиться

7 ответов

var today = DateTime.Today;
var month = new DateTime(today.Year, today.Month, 1);       
var first = month.AddMonths(-1);
var last = month.AddDays(-1);

Встраивают их, если Вам действительно нужны одна или две строки.

283
ответ дан andleer 26 February 2009 в 18:11
поделиться
  • 1
    Мне нравится это решение, но I' m не уверенный, как использовать его в представлении как formset. У Вас есть какие-либо хорошие примеры того, как использовать это в представлении? Любые предложения ценятся. – Joe J 9 June 2010 в 04:42

Путем я сделал, это в прошлом является первым, добираются, первый день этого месяца

dFirstDayOfThisMonth = DateTime.Today.AddDays( - ( DateTime.Today.Day - 1 ) );

Тогда вычитают день для получения, конец прошлого месяца

dLastDayOfLastMonth = dFirstDayOfThisMonth.AddDays (-1);

Тогда вычитают месяц для получения первого дня предыдущего месяца

dFirstDayOfLastMonth = dFirstDayOfThisMonth.AddMonths(-1);
22
ответ дан MikeW 26 February 2009 в 18:11
поделиться
  • 1
    Carl Meyer имеет, я думаю, более чистый способ, которым Вы искали. – Jarret Hardie 8 March 2009 в 18:15

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

DateTime now = DateTime.Now;
DateTime thisMonth = new DateTime(now.Year, now.Month, 1);
DateTime lastMonth = thisMonth.AddMonths(-1);

var RequestIds = rdc.request
  .Where(r => lastMonth <= r.dteCreated)
  .Where(r => r.dteCreated < thisMonth)
  .Select(r => r.intRequestId);
1
ответ дан Amy B 26 February 2009 в 18:11
поделиться
DateTime LastMonthLastDate = DateTime.Today.AddDays(0 - DateTime.Today.Day);
DateTime LastMonthFirstDate = LastMonthLastDate.AddDays(1 - LastMonthLastDate.Day);
8
ответ дан Franci Penov 26 February 2009 в 18:11
поделиться

Подход с помощью дополнительных методов:

class Program
{
    static void Main(string[] args)
    {
        DateTime t = DateTime.Now;

        DateTime p = t.PreviousMonthFirstDay();
        Console.WriteLine( p.ToShortDateString() );

        p = t.PreviousMonthLastDay();
        Console.WriteLine( p.ToShortDateString() );


        Console.ReadKey();
    }
}


public static class Helpers
{
    public static DateTime PreviousMonthFirstDay( this DateTime currentDate )
    {
        DateTime d = currentDate.PreviousMonthLastDay();

        return new DateTime( d.Year, d.Month, 1 );
    }

    public static DateTime PreviousMonthLastDay( this DateTime currentDate )
    {
        return new DateTime( currentDate.Year, currentDate.Month, 1 ).AddDays( -1 );
    }
}

Видят эту ссылку , http://www.codeplex.com/fluentdatetime для некоторых вдохновил расширения DateTime.

4
ответ дан Alex Essilfie 26 February 2009 в 18:11
поделиться
  • 1
    I' m пересматривающий это, потому что I' d нравится получать Вашу работу решения. Я могу объявить formset штраф, но если я пытаюсь распечатать его делающий {{formset}}, когда я получаю " не имеет никакого атрибута ' get' " ошибка. Это происходит с любым решением, которое Вы предоставили. Если я циклично выполняюсь через formset и печатаю формы как {{форму}}, я получаю ошибку снова. Если я циклично выполняю и печатаю как {{форма as_table}}, например, я получаю пустые таблицы формы, т.е. никакие поля не печатаются. Какие-либо идеи? – Paolo Bergantino 19 April 2009 в 07:01
DateTime now = DateTime.Now;
int prevMonth = now.AddMonths(-1).Month;
int year = now.AddMonths(-1).Year;
int daysInPrevMonth = DateTime.DaysInMonth(year, prevMonth);
DateTime firstDayPrevMonth = new DateTime(year, prevMonth, 1);
DateTime lastDayPrevMonth = new DateTime(year, prevMonth, daysInPrevMonth);
Console.WriteLine("{0} {1}", firstDayPrevMonth.ToShortDateString(),
  lastDayPrevMonth.ToShortDateString());
1
ответ дан Maksym Gontar 26 February 2009 в 18:11
поделиться

с использованием Fluent DateTime https://github.com/ FluentDateTime / FluentDateTime

        var lastMonth = 1.Months().Ago().Date;
        var firstDayOfMonth = lastMonth.FirstDayOfMonth();
        var lastDayOfMonth = lastMonth.LastDayOfMonth();
11
ответ дан 24 November 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: