0

我有一个 SQL Server 数据库,其中有一列日期为2001-12-23. insert 语句使用以下代码确保输入的格式正确:

var start_date_formatted = DateTime.ParseExact(start_date.Text, "dd-MM-yyyy", null);

即使输入被格式化,因为dd-MM-yyyy它仍然在数据库中显示为2001-12-23.

我不明白的事实是,每当我从数据库中查询数据时,它都会返回格式正确的日期,dd-MM-yyyy即使它在数据库中显示为yyyy-MM-dd.

这没什么大不了的,因为我最终得到了我需要的格式。

问题是时间字符串被添加到我的日期生成的输出23-12-2001 00:00:00。我只需要日期,但无法弄清楚为什么要添加它以及为什么不能使用以下方法更改它:

DateTime.ParseExact(startdate, "dd-MM-YYYY", null); // string is not recognized as valid DateTime

或者

.ToString("dd-MM-YYYY"); // no overload method ToString that takes 1 argument

由于我是 asp.net 的新手,我想了解如何处理日期格式以及是否有任何一般配置设置需要并设置某些日期格式?

更新

var dt = BookingAccess.ManageBookingsDataTable();
            string id = string.Empty;
            string name = string.Empty;
            string startdate = string.Empty;
            string enddate = string.Empty;
            string full_string = string.Empty;
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    id = dt.Rows[i]["id"].ToString();
                    var sdate = dt.Rows[i]["start_date"];
                    name = dt.Rows[i]["Pet name"].ToString();
                    startdate = dt.Rows[i]["start_date"].ToString("dd-MM-yyyy"); // error is thrown here
                    enddate = dt.Rows[i]["end_date"].ToString();
                    full_string = startdate + " to " + enddate + " (" + name + ")";
                    CurrentBookings.Items.Add(new ListItem(full_string, id));
                }
            }

这似乎也没有格式化日期:

startdate = string.Format("{0:dd/MM/yyyy}", dt.Rows[i]["start_date"].ToString());
4

2 回答 2

2

在 C# 中没有 Date 类型,因此所有日期都是 DateTime 类型的变量。因此,当您从 db 获取日期时,它会以时间 00:00:00 传输到 DateTime 变量

要从中获取字符串,您可以使用ToString("dd-MM-yyyy")

var dt = DateTime.Now;
string dateinstring = dt.ToString("dd-MM-yyyy")); //it contains "23-11-2012"

更新:

你的问题是你的数据表没有输入,所以你的开始日期是对象,而不是日期时间。您应该将其转换为 DateTime:

startdate = ((DateTime)dt.Rows[i]["start_date"]).ToString("dd-MM-yyyy");

如果您dt.Rows[i]["start_date"]不可为空,这将起作用,在其他情况下,您应该在转换之前检查它是否不为空。

于 2012-11-22T21:08:17.567 回答
0

您不必担心 SQL Server 中 DateTime 的显示格式。在我的 SQL 管理工作室中,它们也显示为 2001-12-23,但在我的 Visual Studio 中显示为 23-12-2001。

您可能将列数据类型设置为DateTime. 如果未指定,这将添加时间 00:00:00。如果您只想存储日期,则可以指定类型,尽管在您的网站上Date格式化并不重要。DateTime

--

更新:

将数据库中的值转换为 DateTime,然后对其进行格式化:

DateTime date = Convert.ToDateTime(dt.Rows[i]["start_date"]); 
string startdate = date.ToString("dd-MM-yyyy");
于 2012-11-22T21:07:52.517 回答