我有一个包含四列和n行的数据表。在第一列中,我只有代表日期时间的整数(Int64)。在其他三列中,我有字符串。将Int64类型的数据表列中的所有值更改为在C#中键入Datetime
我只想将第一列中的整数值更改为以下格式的日期时间(yyyy-MM-ddTHH:mm:ss.fffffff)。
我附加了我试图做的事情。但是我收到了一个异常,无法将Int64转换为DateTime。
所以这就是我需要: 1.如何循环通过第一列。 2.如何更改/从Int64的第一列转换的每个条目为DateTime
我有一个包含四列和n行的数据表。在第一列中,我只有代表日期时间的整数(Int64)。在其他三列中,我有字符串。将Int64类型的数据表列中的所有值更改为在C#中键入Datetime
我只想将第一列中的整数值更改为以下格式的日期时间(yyyy-MM-ddTHH:mm:ss.fffffff)。
我附加了我试图做的事情。但是我收到了一个异常,无法将Int64转换为DateTime。
所以这就是我需要: 1.如何循环通过第一列。 2.如何更改/从Int64的第一列转换的每个条目为DateTime
环DataTable.Rows
获取Rows[i][0]
设为new DateTime(long.Parse("Your integer"))
你的Int64列商店,你可以简单的将其转换为DateTime
类型使用DateTime dateTime = new DateTime(ticks);
蜱,因此使用foreach
循环,你可以这样做
DataTable table = GetTable(); // Get the data table.
foreach (DataRow row in table.Rows) // Loop over the rows.
{
var dt = new DateTime(long.Parse(row["ColumnName"].ToString())); // parse to datetime
}
蜱转换为DateTime这样的:
foreach (DataRow row in table.Rows) //table is your DataTable variable.
{
DateTime dateTime = new DateTime(long.Parse(row["Date"].ToString()));
row["Date"] = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
}
但是,如果您的“Date”列的类型为long,那么您将无法在其中插入DateTime或字符串类型。
或者,你也可以使用列的索引,而不是列名,像这样(蜱假设列的索引为0):
foreach (DataRow row in table.Rows)
{
DateTime dateTime = new DateTime(long.Parse(row[0].ToString()));
row[0] = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
}
...那个问题是......? – Nino
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("OldDate", typeof(long));
dt.Columns.Add("ColA", typeof(string));
dt.Columns.Add("ColB", typeof(string));
dt.Columns.Add("ColC", typeof(string));
dt.Rows.Add(new object[] { 636038375869883449, "b", "b", "b" });
dt.Rows.Add(new object[] { 636038375869883450, "b", "b", "b" });
dt.Rows.Add(new object[] { 636038375869883451, "b", "b", "b" });
dt.Rows.Add(new object[] { 636038375869883452, "b", "b", "b" });
dt.Rows.Add(new object[] { 636038375869883453, "b", "b", "b" });
dt.Columns.Add("NewDate", typeof(DateTime));
foreach (DataRow row in dt.AsEnumerable())
{
row["NewDate"] = DateTime.FromBinary(row.Field<long>("OldDate"));
}
dt.Columns.Remove("OldDate");
dt.Columns["NewDate"].SetOrdinal(0);
}
}
}
建议你添加新DateTime
数据表中的列。将Int64
列值转换为DateTime
,并按如下所示进行分配。可以将DateTime
列值格式化为所需的格式。
DataTable dt = new DataTable("Customers");
dt.Columns.Add("BirtDate", typeof(DateTime));
dt.Columns.Add("BirtDateLong", typeof(long));
for(int i=0;i<10;i++)
{
DataRow drow = dt.NewRow();
drow["BirtDateLong"] = 636173924284229875;
dt.Rows.Add(drow);
}
IEnumerable<DataRow> rows = dt.Rows.Cast<DataRow>();
rows.ToList().ForEach(r => r.SetField("BirtDate", new DateTime(Convert.ToInt64(r["BirtDateLong"]))));
你的Int64列存储蜱,所以你可以使用'日期时间日期时间=新日期时间(蜱);'。添加你的代码到目前为止您尝试的。 –
与您需要帮助的问题相关的字符串列如何?看来你需要在C#中将Int64转换为DateTime以及如何在C#中访问数据库?这是两个完全不同的问题。考虑把你的问题写成一个最小的,完整的问题示例.. –