如何将DateTime转换为该月的最后一天?

CJ7*_*CJ7 5 .net c# datetime

DateTime例如,如果我有一个2012-05-24,那么将它转换为该月最后一天(2012-05-31)的最快捷方式是什么.

Jon*_*eet 14

那么你可以使用:

DateTime date = ...;
var endOfMonth = new DateTime(date.Year, date.Month, 
                              DateTime.DaysInMonth(date.Year, date.Month));
Run Code Online (Sandbox Code Playgroud)

需要注意的是,这将创建DateTime一个KindUnspecified.你应该考虑Kind你真正想要的东西.(或者使用我的Noda Time库,你可以使用它LocalDate.)

  • @SubinJacob:看起来很清楚,因为我明确地调用了`new DateTime(...)`.我会改变`date`的那个. (2认同)

Tim*_*ers 7

这是我使用的一些扩展方法:

public static class DateTimeExtensionMethods
{
    public static DateTime StartOfMonth(this DateTime date)
    {
        return new DateTime(date.Year, date.Month, 1);
    }
    public static DateTime EndOfMonth(this DateTime date)
    {
        return date.StartOfMonth().AddMonths(1).AddSeconds(-1);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在我的情况下,我将它们用于 SQL 查询,因此我希望它最多可用于本月最后一天的最后一秒。

根据评论,是的,如果您只想要日期而不是时间,您可以使用:

    public static DateTime EndOfMonth(this DateTime date)
    {
        return date.StartOfMonth().AddMonths(1).AddDays(-1);
    }
Run Code Online (Sandbox Code Playgroud)

或者只是使用Date结果的属性来获取日期部分,然后它满足两种情况,具体取决于您如何使用它。