13

我有两个字符串:

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);

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

4

9 回答 9

15

试试这样;

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);

这是一个演示

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

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

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

于 2013-02-18T09:33:33.267 回答
3

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

于 2013-02-18T09:28:58.157 回答
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);
于 2013-02-18T09:31:11.560 回答
1

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

'HH' 表示两位数的小时,但您有一位数的小时。

请改用“h”。

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

于 2013-02-18T09:28:03.437 回答
1

我有不同的格式,上面的答案不起作用:

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}

于 2019-02-14T06:55:12.643 回答
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);
于 2013-02-18T09:32:34.107 回答
0

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

        string string1 = "13/2/09";
        string string2 = "2:35:10 PM";
        DateTime combined = DateTime.Parse(string1 + ' ' + string2, new CultureInfo("UK"));
于 2013-02-18T09:35:15.143 回答
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(..)参数。

于 2013-02-18T09:54:40.883 回答
-1

使用 DateTime.Parse() 分别解析日期和时间。然后把第二个的时间分量加到第一个上,像这样

var date = DateTime.Parse (one);
var time = DateTime.Parse (two);
var result = date + time - time.Date;
于 2013-02-18T09:28:56.847 回答