如何将两个字符串(日期和时间)组合到单个DateTime

我有两个字符串:

string one = "13/02/09"; string two = "2:35:10 PM"; 

我想将这两者结合在一起并转换为DateTime

我尝试了以下但它不起作用:

 DateTime dt = Convert.ToDateTime(one + " " + two); DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy HH:mm:ss tt", CultureInfo.InvariantCulture); 

我能做些什么来完成这项工作?

试试这样;

 string one = "13/02/09"; string two = "2:35:10 PM"; DateTime dt = Convert.ToDateTime(one + " " + two); DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy h:mm:ss tt", CultureInfo.InvariantCulture); Console.WriteLine(dt1); 

这是一个DEMO

HH使用0023的24小时制。 例如; 1:45:30 AM -> 011:45:30 PM -> 13

h使用从1到12的12小时制。例如; 1:45:30 AM -> 11:45:30 PM -> 1

查看更多信息自定义日期和时间格式字符串

你的问题在于你的小时说明; 你想要h小时,使用从1到12的12小时制 ),而不是HH小时,使用从00到23的24小时制 )。

尝试使用与DateTime格式匹配的文化信息作为字符串值:

 DateTime dt = Convert.ToDateTime(one + " " + two, CultureInfo.GetCultureInfo("ro-RO")); 

或修改输入字符串,使小时有2位数:

 string one = "13/02/09"; string two = "02:35:10 PM"; DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy HH:mm:ss tt", CultureInfo.InvariantCulture); 

问题是您指定的格式字符串不正确。

‘HH’表示一个两位数小时,但你只有一个小时。

请改用“h”。

所以完整的格式是’dd / MM / yy h:mm:ss tt’

使用DateTime.Parse()分别解析日期和时间。 然后将第二个的时间组件添加到第一个,就像这样

 var date = DateTime.Parse (one); var time = DateTime.Parse (two); var result = date + time - time.Date; 

以下代码将执行您想要的操作。 我用英国文化来处理你日期的d / m / y结构:

  string string1 = "13/2/09"; string string2 = "2:35:10 PM"; DateTime combined = DateTime.Parse(string1 + ' ' + string2, new CultureInfo("UK")); 

使用string two = "02:35:10 PM"; 而不是string two = "2:35:10 PM"; 而且由于AM / PM格式, hh代替HH

以下是代码:

 string one = "13/02/09"; string two = "02:35:10 PM"; DateTime dateTime = DateTime.ParseExact(one + " " + two, "dd/MM/yy hh:mm:ss tt", CultureInfo.InvariantCulture); 

Convert.ToDateTimeDateTime.ParseExact与您当前线程的文化结合使用,因此您只需执行以下操作即可使事情更清晰:

 string date = "13/02/09"; string time = "2:35:10 PM"; DateTime dateTime = DateTime.Parse(date +" "+ time, new CultureInfo("en-GB")); Console.WriteLine (dateTime); 

这给出了结果13/02/2009 14:35:10 ,并强制解析使用en-GB日期时间格式。 如果您的Windows安装无论如何都是en-GB,则不需要CultureInfo(..)参数。