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

本文关键字:时间 日期 单个 合并 两个 字符串 | 更新日期: 2023-09-27 17:59:57

我有两个字符串:

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

这是一个演示

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

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

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

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

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

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}

尝试使用与字符串值的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"表示 dwo 数字小时,但您有一个个位数小时。

请改用"h"。

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

以下代码将执行您想要的操作。我使用英国文化来照顾你约会的 d/m/y 结构:

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

由于 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);
Convert.ToDateTime

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

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

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