2013-08-21 71 views
5

如果我有一個DateTime,例如2012-05-24,將其轉換爲該月的最後一天的日期的最快方法是什麼(2012-05-31)。如何將DateTime變成月份的最後一天?

+0

已經這個問題可以討論** [參考文獻] [1] ** [1]:http://stackoverflow.com/questions/2493032/how-to-get-the-last -day-of-month –

回答

14

那麼你可以使用:

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

需要注意的是,這將創建一個DateTimeUnspecified一個Kind。你應該考慮你真的想要什麼Kind。 (或使用我Noda Time庫,在那裏你會使用一個LocalDate代替。)

+0

爲什麼你使用'var'類型而不是'DateTime'? –

+2

@SubinJacob:這似乎很清楚,因爲我明確地調用了'new DateTime(...)'。不過,我會改變'日期'的。 –

+1

我的答案似乎沒用,當你回答的人:( –

3

這裏的一些推廣方法我用:

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屬性剛剛得到的日期部分,然後將其根據你的使用方式來滿足這兩種情況。

+0

「月末」會在本月的最後一天的11:59:59分,這不是所描述的無可否認,OP可以使用'Date'屬性,但是在午夜創建一個新的'DateTime'會感覺更清晰,就像你對'StartOfMonth'的操作一樣(並且可以很容易地直接完成)。 –

+0

Just將.AddSeconds(-1)改爲.AddDays(-1),然後改爲。 – Loyalar

+0

@LarsJensen:在那一刻,我會刪除我的downvote,是的。它仍然不是我的首選解決方案,但它至少會更好。 (無論如何刪除「一秒鐘」都是奇怪的 - 不是那代表當天的最後一個DateTime值,一個* tick *會更明智,但通常在涉及時間時最好使用獨佔終點反正一段時間...) –

3

試試這個

DateTime dt = DateTime.Parse("2012-05-24");    
DateTime lastDate = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month)); 
1

試試這個

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

輸出: 5/31/2012 12:00:00 AM

然後,您可以修改此爲您所需的格式。

相關問題