【问题标题】:How can I get the last day of the month in C#? [duplicate]如何在 C# 中获取一个月的最后一天? [复制]
【发布时间】:2011-06-07 00:13:57
【问题描述】:

如何在 C# 中找到一个月的最后一天?

【问题讨论】:

标签: c#


【解决方案1】:
DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)

【讨论】:

    【解决方案2】:

    另一种方法:

    DateTime today = DateTime.Today;
    DateTime endOfMonth = new DateTime(today.Year, 
                                       today.Month, 
                                       DateTime.DaysInMonth(today.Year, 
                                                            today.Month));
    

    【讨论】:

    • 我正要建议 System.Globalization.CultureInfo.CurrentCulture.Calendar.GetDaysInMonth.GetDaysInMonth 但这要短得多。
    • 晚了,但对于任何旅行者。如果您打算在您的应用程序中使其更通用或扩展方法,指定类型可能很重要。 DateTime.SpecifyKind( new DateTime(/*...*/) , existingDateTime.Kind) 否则您可能会丢失现有日期时间的时区信息。
    【解决方案3】:
    public static class DateTimeExtensions
    {
        public static DateTime LastDayOfMonth(this DateTime date)
        {
            return date.AddDays(1-(date.Day)).AddMonths(1).AddDays(-1);
        }
    }
    

    【讨论】:

    • 当您需要保留日期的时间部分时,这是一个很好的解决方案。其他解决方案不这样做。我建议将“AddDays(1-(date.Day))”重写为“AddDays(-date.Day + 1)”以使意图更清晰。
    【解决方案4】:

    试试这个。它会解决你的问题。

     var lastDayOfMonth = DateTime.DaysInMonth(int.Parse(ddlyear.SelectedValue), int.Parse(ddlmonth.SelectedValue));
    DateTime tLastDayMonth = Convert.ToDateTime(lastDayOfMonth.ToString() + "/" + ddlmonth.SelectedValue + "/" + ddlyear.SelectedValue);
    

    【讨论】:

    • 构造一个string 以便您可以parse it into a DateTime 效率低下并且依赖于当前文化的日期格式。其他三年前的答案提供了更清洁的解决方案。
    【解决方案5】:

    类似:

    DateTime today = DateTime.Today;
    DateTime endOfMonth = new DateTime(today.Year, today.Month, 1).AddMonths(1).AddDays(-1);
    

    也就是说你得到下个月的第一天,然后减去一天。框架代码将处理月份长度、闰年等等。

    【讨论】:

    • 正是我想写的,但认为有人会打败我:) +1
    • 嗯 .. 如果它在代码中的许多地方重复使用,请将其编写为 dateTime 类的扩展方法,您可以在 DateTime.Now 上调用该方法。例如。 DateTime.Now.LastDayOfMonth();
    • 我最喜欢这个 approtch。但是我注意到它实际上并没有结束最后一天,它已经到了上午 12 点。我这样做了 DateTime endOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddSeconds(-1);返回“9/30/2020 11:59:59 PM”而不是“9/30/2020 12:00:00 AM”
    • @Skint077 - 改用 AddMilliSeconds。它更准确一点
    猜你喜欢
    • 2016-02-22
    • 2015-04-03
    • 2012-02-13
    • 1970-01-01
    • 2011-05-03
    • 2013-11-25
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多