如何更改datatable中日期列的日期格式?

时间:2015-02-15 06:11:10

标签: c# string date datetime datatable

我从数据库填充数据。 它包含两个字段:DATETIME

这两个字段都是datetime

我想迭代数据表并更改DATE列的日期格式,即dd/MM/yyyy

int i = 0;
string d="";
foreach (DataRow dr in dataTable.Rows)
{
    d = dr["DATE"].ToString();
    DateTime date = Convert.ToDateTime(d);
    d = date.ToString("dd/MM/yyyy");
    dataTable.Rows[i]["DATE"] = d;
    i++;
}

我收到以下错误

  

字符串未被识别为有效的DateTime。

无法在DATE列中存储<15/02/2015>。预期类型是DateTime。我怎样才能实现它?

1 个答案:

答案 0 :(得分:1)

,您没有告诉我们 您是如何创建dataTable的,而是我的想法......

如果您的DATETIME列都是DateTime,那么您需要提供Datetime个值。不是string

在.NET Framework中,DateTime结构没有任何隐式格式。它只有日期和时间值。当您尝试对其进行格式化时,您会得到它的字符串表示形式。这就是为什么15/02/2015在您的情况下将是string,而不是DateTime

您的FormatException方法获得Convert.ToDateTime可能是因为您的d值不是standard date and time formatCurrentCulture。您可以使用DateTime.ParseExactDateTime.TryParseExact方法使用自定义日期和时间解析。

string s = "15/02/2015";
DateTime dt;
if(DateTime.TryParseExact(s, "dd/MM/yyyy", CultureInfo.InvariantCulture,
                          DateTimeStyles.None,
                          out dt))
{
    Console.WriteLine(dt);
}

即使您这样做,为什么还要将string值保留在datetime类型列中?这根本没有意义 。即使你这样做,因为.Rows返回DataRowCollection,你可能会得到 Collection被修改;枚举操作可能无法执行错误,因为您在迭代时尝试修改集合。

我建议您为字符串值创建另一个DataTable,并将其添加到DateTime值字符串表示形式为dd/MM/yyyy格式,如;

int i = 0;
string d = "";
var stringDataTable = new DataTable();
stringDataTable.Columns.Add("DATE", typeof(String));
stringDataTable.Columns.Add("TIME", typeof(String));

foreach(DataRow dr in dataTable.Rows)
{
   d = ((DateTime)dr["DATE"]).ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
   stringDataTable.Rows[i]["DATE"] = d;
   i++;
}