2012-11-20 40 views
38

每當我在我的mvc3應用程序中創建一個不可計數的日期時間時,它默認爲now(),現在是當前日期和當前時間。我想將它默認爲今天的上午12點。如何將時間設置爲當天午夜?

我試圖默認時間在我的MVC ...但...下面不是設置爲今天的日期@ 12am。相反,它默認使用當前的日期和時間。

private DateTime _Begin = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 12, 0, 0); 
public DateTime Begin { get { return _Begin; } set { _Begin = value; } } 

我該如何設置爲不可空日期時間的當前日期的上午12點?

回答

67

您可以使用DateTime對象的Date屬性 - 例如

DateTime midnight = DateTime.Now.Date; 

所以,你的代碼示例變得

private DateTime _Begin = DateTime.Now.Date; 
public DateTime Begin { get { return _Begin; } set { _Begin = value; } } 

PS。回到你原來的代碼設置小時會給你中午當天的時間,因此,你也可以使用 ...

var now = DateTime.Now; 
new DateTime(now.Year, now.Month, now.Day, 0, 0, 0); 
+10

還有'DateTime.Today' –

+2

@Erv的確如果你反映(反彙編M $ dll),你會發現'Today'只是'DateTime.Now.Date'的封裝 - 所以我個人覺得這只是顯示了我的代碼中更多的意圖... –

+0

我不同意。今天意味着它所說的。談論一天的時候,我從不假設時間。不得不說Now.Date過於冗長。 –

-1

試試吧......

DateTime Date = DateTime.Now.AddHours(-DateTime.Now.Hour).AddMinutes(-DateTime.Now.Minute).AddSeconds(-DateTime.Now.Second);

輸出將... 。

2015年7月29日00:00:00

+0

這個問題已經有一個廣爲接受和接受的答案。請閱讀它和它的評論 - 他們解釋了爲什麼你的方法真的不是一個好主意。 – vesan

0

使用上述的一些建議,下面的函數和代碼正在搜索的日期範圍:

設置日期與時間的組件集00:00:00

public static DateTime GetDateZeroTime(DateTime date) 
{ 
    return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); 
} 

使用

var modifieddatebegin = Tools.Utilities.GetDateZeroTime(form.modifieddatebegin); 

var modifieddateend = Tools.Utilities.GetDateZeroTime(form.modifieddateend.AddDays(1)); 
+0

您的GetDateZeroTime實現等同於訪問DateTime對象的Date屬性,即 date.Date – user3074376

1

只需要將其設置爲

DateTime.Now.Date

 Console.WriteLine(DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss")); 
     Console.Read(); 

     It shows "2017-04-08 00:00:00" on my machine. 
0

大多數建議的解決方案可以根據與每個日期相關的時間造成1天誤差。如果您正在尋找到日期之間的日曆天的整數,而不管每個日期相關聯的時候,我發現這工作得很好:

return (dateOne.Value.Date - dateTwo.Value.Date).Days;