2013-02-20 122 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); 
      } 
     }