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

C# 如何更改datatable中日期列的日期格式?,c#,string,date,datetime,datatable,C#,String,Date,Datetime,Datatable,我正在从数据库中填充数据表。 它包含两个字段:日期,时间 这两个字段都是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/yyy

我正在从数据库中填充数据表。 它包含两个字段:
日期
时间

这两个字段都是
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
TIME
列都是
DateTime
,则需要为它们提供
DateTime
值。不是
字符串

在.NETFramework中,结构没有任何隐式格式。它只有日期和时间值。当您尝试格式化它时,您会得到它的字符串表示形式。这就是为什么在您的情况下,
2015年2月15日
将是一个
字符串
,而不是
DateTime

您在
Convert.ToDateTime
方法上获得
FormatException
,可能是因为您的
d
值不是您的。您可以使用或方法使用自定义日期和时间解析

即使这样做,为什么要在
datetime
类型化列中保留
string
值?这根本没有道理。即使这样做,由于
.Rows
返回一个值,您可能会得到一个集合被修改的结果;枚举操作可能不会执行错误,因为您试图在迭代集合时修改它

我建议您为字符串值创建另一个
DataTable
,并将它们添加到
DateTime
values字符串表示形式中,如
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++;
}

不行。您可以更改区域设置,使日期默认为第一天和第二个月,例如
Thread.CurrentThread.CurrentCulture=new CultureInfo(“fr”),但您仍然可以获得关联的时间。否则,在打印或处理日期时,您需要更改列类型或事后更改。@RaizeAhamed很乐意提供帮助。
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++;
}