我们有一个包含 3 个字段的数据表 日期(字符串类型)(MM/dd/YYYY) 小时(字符串类型)(24 小时格式)和分钟(字符串类型) 我需要根据上述 3 列创建另一列日期时间列,并且需要按该日期时间列
对数据表进行排序
Date Hours Minutes
5/19/2015 12 30
11/18/2015 23 45
我尝试Date +" "+Hours+":"+ Minutes
创建这样的字符串并转换为日期时间。但是我收到错误
"字符串未被识别为有效的日期时间。"
请问这个问题可以帮助我
为什么一开始就将所有内容存储为字符串?但是,您可以使用 DateTime.TryParseExact
生成完整的日期时间。然后,您可以使用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
将所有信息存储在一个对象中。表中的三列是多余的。
您需要迭代 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)
使用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();
}