在c#中将日期字符串和时间字符串转换为datetime

时间:2015-06-18 07:19:42

标签: c# date datetime

我们有一个包含3个字段的数据表日期(字符串类型)(MM / dd / YYYY)小时(字符串类型)(24小时格式)和分钟(字符串类型)我需要创建另一个日期列时间基于上述3列,需要按日期时间列对数据表进行排序

Date        Hours   Minutes
5/19/2015   12      30
11/18/2015  23      45

我尝试创建一个类似于此Date +" "+Hours+":"+ Minutes的字符串并转换为datetime。但是我收到了一个错误

  

“字符串未被识别为有效的DateTime。”

请帮助我解决这个问题

3 个答案:

答案 0 :(得分:0)

您需要迭代DataTable并使用显式格式字符串DateTime.ParseExact,如下所示:

DataTable dt;
foreach (var row in dt.Rows) 
    row["DateTime"]=DateTime.ParseExact(row.Date +" "+row.Hours+":"+ row.Minutes,"MM/dd/yyyy HH:mm",null)

答案 1 :(得分:0)

为什么首先将所有内容存储为字符串?但是,您可以使用DateTime.TryParseExact构建完整的DateTime。然后您可以使用Linq-To-DataTable进行排序。最后使用CopyToDataTable

创建有序表
table.Columns.Add("DateColumn", typeof(DateTime));
foreach (DataRow row in table.Rows)
{
    string dateTimeString = String.Format("{0} {1}:{2}",
        row.Field<string>("Date"),
        row.Field<string>("Hours"),
        row.Field<string>("Minutes"));
    DateTime date;
    if(DateTime.TryParseExact(dateTimeString, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out date));
    {
        row.SetField("DateColumn", date);
    }
}
table = table.AsEnumerable()
    .OrderBy(row => row.Field<DateTime>("DateColumn"))
    .CopyToDataTable();

因此,您无需单独存储小时和分钟,DateTime将所有信息存储在一个对象中。表中的三个列是多余的。

答案 2 :(得分:0)

使用ParseExact方法。我觉得很简单

  table.Columns.Add("MixedData",typeof(DateTime));
    foreach (DataRow row in table.Rows)
    {
                    DateTime date = DateTime.ParseExact(row["Dates"].ToString() + " " + row["Hours"] + ":" + row["Minutes"], "M/dd/yyyy H:mm", CultureInfo.InvariantCulture);
                    row["MixedData"] = date;
                    table.AcceptChanges();
   }