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

时间:2013-02-18 09:23:08

标签: c# string parsing 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);

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

9 个答案:

答案 0 :(得分:11)

试试这个;

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

查看更多信息 Custom Date and Time Format Strings

答案 1 :(得分:3)

您的问题与您的小时说明符有关;你想要h小时,使用12小时制1到12小时),而不是HH小时,使用24小时时钟来自00至23 )。

答案 2 :(得分:2)

尝试使用与您的字符串值匹配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);

答案 3 :(得分:1)

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

'HH'表示一个两位数的小时,但你有一个小时的数字。

改用'h'。

所以完整格式为'dd / MM / yy h:mm:ss tt'

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

由于AM / PM格式,使用string two = "02:35:10 PM";代替string two = "2:35:10 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);

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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(..)参数。

答案 8 :(得分:0)

我的格式不同,以上答案无效:

string one = "2019-02-06";
string two = "18:30";

此格式的解决方案是:

DateTime newDateTime = Convert.ToDateTime(one).Add(TimeSpan.Parse(two));

结果将是:newDateTime {06-02-2019 18:30:00}