我们有一个包含3个字段的数据表日期(字符串类型)(MM / dd / YYYY)小时(字符串类型)(24小时格式)和分钟(字符串类型)我需要创建另一个日期列时间基于上述3列,需要按日期时间列对数据表进行排序
Date Hours Minutes
5/19/2015 12 30
11/18/2015 23 45
我尝试创建一个类似于此Date +" "+Hours+":"+ Minutes
的字符串并转换为datetime。但是我收到了一个错误
“字符串未被识别为有效的DateTime。”
请帮助我解决这个问题
答案 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();
}