DateTime.Now.TimeOfDay()没有给出正确的格式

时间:2015-08-09 21:51:24

标签: c# datetime

运行程序时没有任何问题,但我在tableAdapter中输出错误。

OleDbCommand cmd4 = new OleDbCommand("Insert Into loginReport Values(?,?,?,?,?,?)", conn);cmd4.Parameters.AddWithValue("Username", textBox1.Text);
cmd4.Parameters.AddWithValue("Account Type", "admin");
cmd4.Parameters.AddWithValue("Time(LOG-IN)", DateTime.Now.TimeOfDay); //this where i get wrong output
cmd4.Parameters.AddWithValue("Time(LOG-OUT)", DateTime.Now.TimeOfDay); //this where i get wrong output
cmd4.Parameters.AddWithValue("Date()", DateTime.Now.Date);
cmd4.Parameters.AddWithValue("Remarks", "admin");
cmd4.ExecuteNonQuery();
conn.Close();

输出: enter image description here

Time(Log-in/Log-out)列中,我只需要获得时间hh:mm am/pm格式,但该日期(12/30/1899)的来源是什么?我相信这与格式有关,但我不知道该怎么做。我的数据库很好,我检查了数据类型和日期/时间的格式。我选择了中等时间,我的数据库看起来很好。 enter image description here

2 个答案:

答案 0 :(得分:1)

在.NET中没有简单的TIME类型,只有DateTime类型,因此当您使用db返回的数据加载适配器时,NET只能将值存储在DateTime变量中(或者在具有DateTime的DataColumn中更好)类型)。然后,当您使用DataGridView显示该数据时,将显示该列的Date部分以及您可以看到的结果。

修复"格式"通过网格显示,您只需要为您的网格提供显示DateTime值的列的相应格式说明符。

例如,假设您的网格被调用dgv(在设置DataSource之后)

dgv.Columns["Time(LOG-IN)"].DefaultCellStyle.Format = "hh:mm:ss tt";
dgv.Columns["Time(LOG-OUT)"].DefaultCellStyle.Format = "hh:mm:ss tt";

作为旁注,我强烈建议不惜一切代价避免AddWithValue。这个shorcut在处理日期时有很多问题

Can we stop to use AddWithValue already?

答案 1 :(得分:-1)

您的代码会自动解析为SQL,因此您的数据库会插入默认的日期时间值12/30/1899。您必须首先在C#中声明一个日期时间变量,设置它,然后传入变量,即

DateTime now = DateTime.Now;    
OleDbCommand cmd4 = new OleDbCommand("Insert Into loginReport Values(?,?,?,?,?,?)", conn);cmd4.Parameters.AddWithValue("Username", textBox1.Text);
                cmd4.Parameters.AddWithValue("Account Type", "admin");
                cmd4.Parameters.AddWithValue("Time(LOG-IN)", now); //this where i get wrong output
                cmd4.Parameters.AddWithValue("Time(LOG-OUT)", now); //this where i get wrong output
                cmd4.Parameters.AddWithValue("Date()", now);
                cmd4.Parameters.AddWithValue("Remarks", "admin");
                cmd4.ExecuteNonQuery();
                conn.Close();