为什么date.ToString()会随时间显示

时间:2013-09-29 21:11:03

标签: c# sql sql-server winforms

我的sql-server数据库中有一个date数据类型的列,我将其插入1999-12-23。当我在我的数据库中运行select查询时,将日期显示为1999-12-23,但是当我将数据库连接到我的c#winform应用程序并检索它显示为1999-12-23 00:00:00的日期时(即它显示日期和时间)

这些是我使用的代码

创建表

CREATE TABLE Users.Personal
(
/*...Other Codes for the table this is the main problem*/
DateofReg date NOT NULL
)

选择查询

SELECT * FROM Users.Personal

(这会将日期显示为1999-12-23

连接数据库

private void RetrievePersonalDetails()
{
    SqlConnection myConnection = new SqlConnection("server=AMESINLOLA;" +
        "Trusted_Connection=yes;" +
        "database=Crm_Db;");
    myConnection.Open();

    SqlCommand myCommand = myConnection.CreateCommand();
    myCommand.CommandText = "SELECT * FROM Users.Personal WHERE UniqueID='" + uniqueid + "'";
    myCommand.CommandType = CommandType.Text;

    SqlDataReader myReader = myCommand.ExecuteReader();

    if (myReader.Read())
    {
        //Other codes inserting to textbox but this is the main problem
        txtDor.Text = myReader["DateofReg"].ToString();
    }
    else
    {
        MessageBox.Show("Empty");
    }
    myConnection.Close();
    myReader.Close();
}

(这会将日期显示为1999-12-23 00:00:00

为什么日期在应用程序中显示时间但在数据库中显示良好,我该怎么做只显示日期?

6 个答案:

答案 0 :(得分:6)

myReader["DateofRef"]似乎返回DateTime个对象。这内部存储日期值的刻度(包括时间和毫秒等)。

ToString为DateTime对象应用默认格式。

你也可以使用      DateTime.Now.ToShortDateString()只会打印年,月,日。

格式虽然取决于当前的文化(Thread.CurrentThread.CurrentCulture),ToStrin也会采用名为IFormatProvider的参数,这可以设置为您想要指定日期的文化字符串应该使用CultureInfo...

您可以通过将格式传递给ToString方法来更改格式。

可以在http://msdn.microsoft.com/en-US/library/zdtaw1bw(v=vs.110).aspx

找到很多例子

答案 1 :(得分:2)

虽然SQL Server的类型DATE是一个没有时间的日期,但.NET在核心基类库中没有类似的东西。所以它使用DateTime,时间设置为午夜。

您可以通过多种方式获取仅包含DateTime日期的字符串,但由于myReader["DateofReg"]DateTime列为object,您需要如果你要对它做任何事情,先把它抛出来。例如,

// Unbox the result by casting
DateTime dt = (DateTime) myReader["DateofReg"];

// Use a string formatter to get what you want
txtDor.Text = dt.ToString("d");

// or if you prefer, use this shortcut method
txtDor.Text = dt.ToShortDateString();

这应该可以正常工作,但如果由于某种原因你真的想要一个纯粹的“没有时间的日期”类型,它不仅仅是一个字符串或午夜的DateTime,你可以使用{{1从Noda Time库中输入。

答案 2 :(得分:1)

第一个解决方案:

txtDor.Text = myReader["DateofReg"].ToShortDateString();

我不推荐的第二个:

txtDor.Text = myReader["DateofReg"].ToString().Substring(0,10);

答案 3 :(得分:0)

尝试使用ToShortDateString而不仅仅是ToString http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx

答案 4 :(得分:0)

这将确保返回的代码符合短日期时格式化的DateTime对象。

 txtDor.Text = myReader["DateofReg"].GetDateTime.Date.ToString("d"));

可以找到here

的示例

答案 5 :(得分:0)

此代码将以dd / MMM / yyyy格式返回日期。对于前者2013年10月9日将采用2013年10月9日的格式。

txtDor.Text = myReader["DateofReg"].ToString("dd/MMM/yyyy");