2010-01-27 76 views
42

我有一個日曆和一個包含一天中的時間的文本框。我想創建一個兩者結合的日期時間。我知道我可以通過查看小時和分鐘,然後將它們添加到日曆DateTime中,但這看起來相當混亂。在C中添加時間到日期時間#

有沒有更好的方法?

回答

74

您可以使用DateTime.Add()方法將時間添加到日期。

DateTime date = DateTime.Now; 
TimeSpan time = new TimeSpan(36, 0, 0, 0); 
DateTime combined = date.Add(time); 
Console.WriteLine("{0:dddd}", combined); 

您還可以通過parsing a String創建時間跨度,如果這是你需要做什麼。

另外,你可以看看使用其他控件。你沒有提到你是否使用winforms,wpf或asp.net,但有多種日期和時間選擇器控件支持選擇日期和時間。

+1

竅門,非常感謝。 – 4imble 2010-01-27 11:25:34

+0

工作時間過了幾小時,我嘗試了'11:57 pm',這工作: 'TimeSpan time = new TimeSpan(23,57,00); DateTime date_with_time = mydate.Add(time);' – stom 2015-09-01 08:58:58

+0

如果您曾經遇到過特定時間(例如:X小時或Y分鐘)的情況,那麼就有輔助函數,所以您不必創建一個TimeSpan()。例如:'''DateTime.UtcNow.AddSeconds(10);'''//將來10秒鐘! – 2015-10-29 19:40:37

0

將兩者結合。 Date-Time-Picker也支持拾取時間。

你只需要改變Format-Property和CustomFormat-Property。

3

視您的格式(和驗證!)的日期在文本框中輸入,你可以這樣做:

TimeSpan time; 

if (TimeSpan.TryParse(textboxTime.Text, out time)) 
{ 
    // calendarDate is the DateTime value of the calendar control 
    calendarDate = calendarDate.Add(time); 
} 
else 
{ 
    // notify user about wrong date format 
} 

注意TimeSpan.TryParse預計該字符串是在「HH:MM」格式(可選秒)。

3

使用https://github.com/FluentDateTime/FluentDateTime

DateTime dateTime = DateTime.Now; 
DateTime combined = dateTime + 36.Hours(); 
Console.WriteLine(combined); 
+2

我喜歡FuentDateTime。如果這是你想要做的唯一的日期時間總和,那麼它可能不值得。但是,還有很多其他的好東西,比如下一個星期五的時間。 – 2013-05-21 10:16:49

+0

@RichardGarside:你的意思是來自[GitHub](https://github.com/FluentDateTime)的FluentDateTime NuGet包嗎? – 2015-12-15 09:00:25

+0

它可作爲Nuget包使用。 Github頁面上有鏈接。 – 2015-12-17 11:24:36

6

如果您正在使用兩個datetime對象,一個存儲日期其他的時間,你可以做到以下幾點:

var date = new DateTime(2016,6,28); 

var time = new DateTime(1,1,1,13,13,13); 

var combinedDateTime = date.AddTicks(time.TimeOfDay.Ticks); 

這樣的例子可以發現here

+0

正是我在尋找的 – kpkpkp 2017-12-07 21:48:48

0
DateTime newDateTime = dtReceived.Value.Date.Add(TimeSpan.Parse(dtReceivedTime.Value.ToShortTimeString())); 
+1

雖然這是一個正確的答案,但您應該向OP提供一個解釋,而不是僅提供一個代碼,以確保他們(以及任何其他視圖)明白答案是正確的。 – JNYRanger 2017-06-28 17:50:13