【问题标题】:DataTable DateTime Formatting Issue数据表日期时间格式问题
【发布时间】:2015-09-11 21:01:16
【问题描述】:

好的,所以我的DataTable 中有一个列是DateTime,它必须保持为DateTime,以便正确排序。问题是我无法像我需要的那样将其格式化为 MM/dd/yyyy 格式。下面是我的方法的代码,它格式化 DateTable 并从中创建一个新的格式化的,这是我唯一遇到格式化问题的列。它总是像01/15/2014 12:00:00 AM一样回来

private DataTable formatDataTable17(DataTable dt)
{
    DataTable dtNew = new DataTable();
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        // Checks to see if the column name is date
        // if it is, then change the datatype of that
        // column to date time.
        if(dt.Columns[i].ColumnName.ToLower() == "date")
        {
            dtNew.Columns.Add(dt.Columns[i].ColumnName, typeof(DateTime));
        }
        else
        { 
            dtNew.Columns.Add(dt.Columns[i].ColumnName, typeof(String));
        }

    }        
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        DataRow newRow = dtNew.NewRow();

        //newRow[0] = dt.Rows[i][0];  //Date 
        newRow[0] = string.Format("{0:MM/dd/yyyy}", dt.Rows[i][0].ToString());
        newRow[1] = dt.Rows[i][1];  //CICS Region
        newRow[2] = dt.Rows[i][2];  //Transaction
        newRow[3] = dt.Rows[i][3];  //LPAR
        newRow[4] = String.Format("{0:0.000000}", dt.Rows[i][4]);  //CPU Per Transaction
        newRow[5] = String.Format("{0:###,###,##0}", dt.Rows[i][5]);  //Transaction Count
        newRow[6] = String.Format("{0:###,###,##0.00}", dt.Rows[i][6]);  //MIPS Rate
        newRow[7] = String.Format("{0:0.000000}", dt.Rows[i][7]);  //MIPS Usage

        dtNew.Rows.Add(newRow);

    }

【问题讨论】:

  • string.Format("{0:MM/dd/yyyy}", dt.Rows[i][0].ToString()) 不起作用,因为您无法格式化字符串。删除.ToString()
  • @OlivierJacot-Descombes 我在没有 .ToString() 的情况下完成了它并得到了相同的结果。我已经尝试过 DateTime.ParseExact 并且仍然保持相同的格式。我也无法更改我的网格视图,因为它包含除日期之外的其他内容
  • 必须将DateTime 传递给格式化函数,否则将不起作用。如果dt.Rows[i][0] 包含一个字符串,它将保持该字符串的格式。格式化是将二进制值转换为字符串的过程。

标签: c# datetime datatables


【解决方案1】:

DataTable 只是一个存储数据的地方。

它向用户呈现(格式化)的方式应该由您决定用来在DataTable 中显示数据的任何控件来处理。

例如,如果您使用的是DataGridView (WinForms),您可能有这样的代码:

dataGridView1.DataSource = dt;

dataGridView1.Columns["date"].DefaultCellStyle.Format = "MM/dd/yyyy";

你不需要那个formatDataTable17() 方法。

【讨论】:

    【解决方案2】:

    你可以试试这个方法。

    newRow[0] = Convert.ToDateTime(dt.Rows[i][0]).ToString("MM/dd/yyyy");
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2021-07-08
      • 2021-12-19
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多