6

DateTime例如,如果我有一个2012-05-24,那么将其转换为该月最后一天的日期的最快方法是什么(2012-05-31)。

4

4 回答 4

18

那么你可以使用:

DateTime date = ...;
var endOfMonth = new DateTime(date.Year, date.Month, 
                              DateTime.DaysInMonth(date.Year, date.Month));

请注意,这将创建一个DateTime带有 aKindUnspecified。你应该考虑Kind你真正想要什么。(或者使用我的Noda Time库,您可以使用 aLocalDate代替。)

于 2013-08-21T05:59:40.373 回答
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);
    }
}

请注意,在我的情况下,我将它们用于 SQL 查询,所以我希望它到月最后一天的最后一秒。

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

    public static DateTime EndOfMonth(this DateTime date)
    {
        return date.StartOfMonth().AddMonths(1).AddDays(-1);
    }

或者仅使用Date结果的属性来获取日期部分,然后根据您的使用方式满足这两种情况。

于 2013-08-21T06:00:37.033 回答
3

尝试这个

DateTime dt = DateTime.Parse("2012-05-24");            
DateTime lastDate = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
于 2013-08-21T06:05:31.977 回答
1

尝试这个

DateTime date = new DateTime(2012, 05, 24);
DateTime endOfMonth = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));

输出: 2012 年 5 月 31 日上午 12:00:00

然后,您可以将其修改为所需的格式。

于 2013-08-21T06:06:45.387 回答