C#DateTime字段未格式化

时间:2019-01-17 11:34:16

标签: c# visual-studio-2015

我阅读了许多帮助文章,并尝试了几种不同的方法来解决该问题,但均未成功。

当我只拥有代码line.Cells[5].Value = vo2.Rows[0]["Start"].toString();时,在3/9/2019 8:00:00中得到datagridview作为结果。我希望它是dd/mm/yyyy格式。

我该如何实现?

SmartsheetDataAdapter dataAdapter4 = new SmartsheetDataAdapter(sql10, connection);
 DataTable vo2 = new DataTable();
 dataAdapter4.Fill(vo2);
 //double vocost = 0;

 if (vo2.Rows.Count > 0)
 {
     DateTime thisdate = new DateTime(vo2.Rows[0]["Start"]);
     //DateTime deldate = DateTime.ParseExact(dd1, "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
     line.Cells[5].Value = thisdate.ToString("dd/M/yyyy");

当前代码给出错误:

  

参数1:无法从“对象”转换为“长”

2 个答案:

答案 0 :(得分:1)

由于DateTime constructor花了很长时间,但您传递了一个对象,所以您得到了错误:

DateTime thisdate = new DateTime(vo2.Rows[0]["Start"]);

我想DataTable中的第一列已经是DateTime,然后使用它:

DateTime thisdate = vo2.Rows[0].Field<DateTime>("Start");

否则,您必须对其进行解析,例如:

string dtVal = vo2.Rows[0]["Start"].ToString(); // 3/9/2019 8:00:00
DateTime thisdate = DateTime.ParseExact(dtVal, "d'/'M'/'yyyy h:mm:ss", null);

或更简单,因为使用此输入您不需要ParseExact,但可以使用Parse

DateTime thisdate = DateTime.Parse(dtVal);

答案 1 :(得分:0)

您应该Convert读取的值(注意,vo2.Rows[0]["Start"]的类型为object,当您需要DateTime时):

 DateTime thisdate = Convert.ToDateTime(vo2.Rows[0]["Start"]);

 // MM - if you want leading zero; note, that "mm" stands for minutes
 line.Cells[5].Value = thisdate.ToString("dd/MM/yyyy");

说明正在发生的事情:

  1. vo2.Rows[0]["Start"的类型为object
  2. new DateTime(long ticks)想要一个long参数
  3. 编译器抱怨给出了参数的 type (如果您使用 one 调用构造函数,则其类型必须为long