更改Int64类型的数据表列中的所有值,以在C#中键入Datetime

时间:2016-12-15 07:48:49

标签: c# datetime datatable type-conversion int64

我有一个包含四列和n行的数据表。在第一列中,我只有表示日期时间的整数(Int64)。在其他三列中,我有字符串。

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

我附上了我试图做的事情。但我有一个例外,就是无法将Int64转换为DateTime。 enter image description here

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的int64列商店标记,您可以使用scripts.js将其简单地转换为DateTime类型,因此使用DateTime dateTime = new DateTime(ticks);循环可以像

一样
foreach

答案 2 :(得分:0)

将ticks转换为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");
}

但是,如果您的“日期”列的类型为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");
}

答案 3 :(得分: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);
        }
    }
}

答案 4 :(得分: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