2016-12-15 28 views
0

我有一个包含四列和n行的数据表。在第一列中,我只有代表日期时间的整数(Int64)。在其他三列中,我有字符串。将Int64类型的数据表列中的所有值更改为在C#中键入Datetime

我只想将第一列中的整数值更改为以下格式的日期时间(yyyy-MM-ddTHH:mm:ss.fffffff)。

我附加了我试图做的事情。但是我收到了一个异常,无法将Int64转换为DateTime。 enter image description here

所以这就是我需要: 1.如何循环通过第一列。 2.如何更改/从Int64的第一列转换的每个条目为DateTime

+0

你的Int64列存储蜱,所以你可以使用'日期时间日期时间=新日期时间(蜱);'。添加你的代码到目前为止您尝试的。 –

+0

与您需要帮助的问题相关的字符串列如何?看来你需要在C#中将Int64转换为DateTime以及如何在C#中访问数据库?这是两个完全不同的问题。考虑把你的问题写成一个最小的,完整的问题示例.. –

回答

0

DataTable.Rows 获取Rows[i][0] 设为new DateTime(long.Parse("Your integer"))

0

你的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 
} 
0

蜱转换为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"); 
} 
+0

...那个问题是......? – Nino

0

试试这个

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); 
     } 
    } 
} 
+0

这个作品非常好。我得到了s.th.像这样.11.07.2016 12:39:47我怎样才能更准确地得到时间:yyyy-MM-ddTHH:mm:ss.fffffff。该怎么办? – Thomas

+0

这是一个格式问题。 DateTime对象与原始数据具有相同的准确性。字符串的格式需要更改为包含毫秒。 – jdweng

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

enter image description here

+0

这工作真的很好。如何更准确地获取时间(yyyy-MM-ddTHH:mm:ss.fffffff) – Thomas

+0

以字符串格式表示所需字符串格式的Convery Datetime值strDate = DateTime.Now.ToString(“yyyy-MM-ddTHH:mm:ss.fffffff “)。 – jignesh

相关问题