【问题标题】:Change all values in a datatable column of type Int64 to type Datetime in C#将 Int64 类型的数据表列中的所有值更改为 C# 中的 Datetime 类型
【发布时间】:2016-12-15 07:48:48
【问题描述】:

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

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

我附上了我试图做的事情。但我遇到了一个例外,即无法将 Int64 转换为 DateTime。

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

【问题讨论】:

  • 你的 int64 列存储打勾,所以你可以使用DateTime dateTime = new DateTime(ticks);。添加您目前尝试的代码。
  • 字符串列与您需要帮助的问题有什么关系?看来您需要帮助在 C# 中将 Int64 转换为 DateTime 以及如何在 C# 中访问数据库?这是两个完全不同的问题。考虑将您的问题写成该问题的最小、完整示例。

标签: c# datetime datatable type-conversion int64


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的 int64 列存储记号,您可以使用 DateTime dateTime = new DateTime(ticks); 简单地将其转换为 DateTime 类型,因此使用 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 
    }
    

    【讨论】:

      【解决方案3】:

      像这样将刻度转换为日期时间:

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

      【讨论】:

      • ...问题是...?
      【解决方案4】:

      试试这个

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

      【讨论】:

      • 这很好用。我得到了……像这样。11.07.2016 12:39:47 我怎样才能更准确地获得时间:yyyy-MM-ddTHH:mm:ss.fffffff。该怎么办?
      • 这是格式问题。 DateTime 对象与原始数据具有相同的精度。需要更改字符串格式以包含毫秒。
      【解决方案5】:

      建议您在数据表中添加新的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"]))));
      

      【讨论】:

      • 这真的很好用。如何更准确地获取时间(yyyy-MM-ddTHH:mm:ss.fffffff)
      • Convery Datetime 值采用所需的字符串格式,例如 string strDate = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffffff")。
      猜你喜欢
      • 1970-01-01
      • 2021-06-16
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2019-06-18
      • 2016-09-08
      • 2020-12-18
      相关资源
      最近更新 更多