2016-12-15 62 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