【问题标题】:String.Format is not working on datesString.Format 不适用于日期
【发布时间】:2015-09-17 14:42:36
【问题描述】:

我正在执行一个 sql 查询并将其存储在一个数据集中,从那里我发送一封电子邮件,一切都按预期工作,除了这个时间附加到日期 12:00:00 Am,它看起来真的很奇怪电子邮件,我知道发生这种情况是因为该列的数据类型是日期,它附加到的对象将其存储为日期时间,因此重置为午夜,但我直接查询 sql 并从数据表中检索值,但它仍然有附在它上面的时间。无论如何要解决此问题,我尝试了以下方法,但它不起作用:

string conn = ConfigurationManager.ConnectionStrings["WorkOrderConnectionString3"].ToString();
SqlConnection sqlconn = new SqlConnection(conn);
cmd.Connection = sqlconn;
sqlconn.Open();
cmd.CommandType = CommandType.Text;
String getdatasql = "SELECT WorkOrderNum, Requestor, Date, Department, CompletionDate, MachineDescription, MachineLocation," +
"[Type of Work Order], [Work Required], [WorkPerformed / PartsUsed], [Work Completed By :], [Maint. Supv. Approval]," +
" [Work Comp Date], [Supv Approval Date], Status, [Maint. Supv. Approval Date]" +
"FROM Master WHERE ([Type of Work Order] = N'General') AND (WorkOrderNum = @rockbottom) AND Status = 'Complete' ORDER BY WorkOrderNum DESC";
cmd.CommandText = getdatasql;
cmd.Parameters.AddWithValue("@rockbottom", TextBox10.Text);
SqlDataAdapter getdata = new SqlDataAdapter(cmd);
DataSet ds1 = new DataSet();
showdata.Fill(ds1);
string WorkOrderNum = ds1.Tables[0].Rows[0]["WorkOrderNum"].ToString();
string Requestor = ds1.Tables[0].Rows[0]["Requestor"].ToString();
string Date = ds1.Tables[0].Rows[0]["Date"].ToString();
String date = String.Format("{0:MM/d/yyyy}", Date);
cmd.ExecuteNonQuery();

当我进行调试时,我得到了这个:

在我的电子邮件中是这样的:

尝试了解决方案仍然有时间:

搞定了:)

【问题讨论】:

  • @Greg:不,这无济于事。注意Date 的类型。
  • @Greg:不,ds1.Tables[0].Rows[0]["Date"] 的实际值很可能是DateTime...但 OP 正在调用 ToString
  • 如果您想要来自DataRowDateTime 字段,请使用DateTime dt = ds1.Tables[0].Rows[0].Field<DateTime>("Date")。不要摆弄弦乐。然后你可以使用dt.ToString("MM/d/yyyy", CultureInfo.InvariantCulture)
  • @Greg:那是ds1.Tables[0].Rows[0]["Date"]compile-time 类型,但如果那是execution-time 类型,就会有里面没有信息。这就是为什么我谈到“实际价值”。
  • @JonSkeet 你说得对,谢谢你的澄清。

标签: c# asp.net date dataset string.format


【解决方案1】:

这就是问题所在:

string Date = ds1.Tables[0].Rows[0]["Date"].ToString();

您的Date 变量已经是一个字符串,因此尝试将其格式化为DateTime 是行不通的。你想要这样的东西:

DateTime Date = (DateTime) ds1.Tables[0].Rows[0]["Date"];

...尽管我建议不要使用名为 Date 的局部变量,尤其是在范围内还有一个名为 date 的变量...

【讨论】:

  • 离题了,但我注意到你获得了 800k 代表。恭喜!
猜你喜欢
  • 2017-12-31
  • 1970-01-01
  • 2013-07-21
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多