2013-02-20 119 views
0

我需要結合日期和時間並插入到一個日期時間行。組合日期和時間

這裏是我的代碼:

DateTime Headlinedate; 

try 
{ 
    DateTime date = Convert.ToDateTime(txtHeadlinedate.Text.Trim(), Ci); 
    string timestr = DateTime.Now.ToString("hh:mm:ss tt"); 
    DateTime combinedDate = date.Add(TimeSpan.Parse(timestr)); 
    Headlinedate = combinedDate; 

} 
catch { 
    Headlinedate = DateTime.Now; 
} 

我得到異常:

輸入字符串的不正確的格式

+0

當你調試它時,'date'的格式是什麼? – 2013-02-20 07:53:33

+0

'DateTime combinedDate = date.Add(DateTime.Now.TimeOfDay);'而不是從字符串解析'TimeSpan'。 – Habib 2013-02-20 07:55:04

回答

4

如果你得到這個例外第一代碼行,你必須確保​​的內容是有效的,並相應地解析它。

如果錯誤來自於呼叫TimeSpan.Parse,以下版本應該可以解決問題:

DateTime date = Convert.ToDateTime(txtHeadlinedate.Text.Trim(), Ci); 
Headlinedate = date.Add(DateTime.Now.TimeOfDay); 
+0

謝謝,它的工作原理:) – Mandragorasprout 2013-02-20 08:11:50

+0

爲了確保您從第一行(文本字符串的轉換)沒有獲得時間組件,您可以在第一行的末尾添加一個「.Date」。 – 2013-02-20 08:58:53

2

時間跨度無法解析「TT」。使用DateTime解析它,或者改爲使用HH:mm格式來獲得24小時的小時值,並從格式中刪除tt部分。然後TimeSpan將能夠解析它。例如:

DateTime date = Convert.ToDateTime(txtHeadlinedate.Text.Trim(), Ci); 
string timestr = DateTime.Now.ToString("HH:mm:ss"); 
DateTime combinedDate = date.Add(TimeSpan.Parse(timestr)); 
Headlinedate = combinedDate; 
+1

將「now」轉換爲時間字符串並將字符串轉換回「TimeSpan」並不是必須的。 – 2013-02-20 09:08:13

+0

對,這與ybo的答案基本相同。謝謝。 – dotNET 2013-02-21 08:55:29

0
date.Hour=DateTime.Now.Hour; 
date.Minute=DateTime.Now.Minute; 
date.Second=DateTime.Now.Second; 
+3

這是一個相當差的答案,你爲什麼要做3個步驟,當你可以一步到位...? – MethodMan 2013-02-20 07:58:46

+0

這與這個問題有關,因爲..? – 2013-02-20 07:59:10

+0

首先,您不應多次閱讀'Now'屬性。時鐘可能會改變,所以如果你在閱讀第一部分時是「09:59:59」,而當你閱讀最後一部分時是「10:00:00」,你可能會混合使用'09:00:00'這遠非真正的「現在」。另外,如果你的'date'標識符應該是'DateTime'的值,你可以像你一樣對它進行變異。有問題的屬性是'get'-only(沒有setter)。 Downvoted。 – 2013-02-20 09:03:30

0

使用DateTime.TryParse並通過您txtHeadlinedate.Text.Trim()

DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 

以及添加時間跨度值 要麼使用

DateTime myDate = ExistingTime.Date.AddHours(hh).AddMinutes(min); 

或 //計算的是什麼日子本週是這個實例的36天噸。(如下圖所示)

System.DateTime today = System.DateTime.Now; System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0); System.DateTime answer = today.Add(duration); 
0

我想這應該工作

DateTime Headlinedate; 
try 
     { 
      DateTime date = Convert.ToDateTime(txtHeadlinedate.Text.Trim(), Ci); 
      string timestr = DateTime.Now.ToString("MM/dd/yyyy HH:MM:ss");// here is the solution 
      DateTime combinedDate = date.Add(TimeSpan.Parse(timestr)); 
      Headlinedate = combinedDate; 

     } 
     catch { 
      Headlinedate = DateTime.Now; 
     } 
+1

請勿使用「MM」分鐘;這是_months_。 「Now」的日期部分不是目的。這裏真的沒有必要使用'ToString'。 – 2013-02-20 09:10:46

0
DateTime date = Convert.ToDateTime(txtHeadlinedate.Text.Trim(), Ci);  
DateTime combinedDate = new DateTime(date.Year, date.Month, date.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); 
-1

這工作!

DateTime _dateOnly = DateTime.Now; 
DateTime _timeOnly = DateTime.Now; 

public DateTime Combined { get; set; } 

     public DateTime DateOnly 
     { 
      get { return _dateOnly.Date; } 
      set 
      { 
       _dateOnly = value.Date; 
       Combined = DateOnly.Add(TimeOnly.TimeOfDay); 
      } 
     } 

     public DateTime TimeOnly 
     { 
      get { return _timeOnly.ToLocalTime(); } 
      set 
      { 
       _timeOnly = value.ToLocalTime(); 
       Combined = DateOnly.Add(TimeOnly.TimeOfDay); 
      } 
     }