ASP.NET日期格式问题

时间:2012-11-22 20:57:05

标签: asp.net sql-server datetime

我有一个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。< / p>

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

问题是时间字符串被添加到我的日期,生成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());

2 个答案:

答案 0 :(得分:2)

在C#中没有类型日期,因此所有日期都是DateTime类型的变量。因此,当您从db获取日期时,它将转移到DateTime变量,时间为00:00:00

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

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

<强>更新

您的问题是您的数据表未输入,因此您的startdate是object,而不是DateTime。你应该把它投射到DateTime:

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

如果您的dt.Rows[i]["start_date"]不可为空,这将有效,在其他情况下,您应该在投射前检查它是否为空。

答案 1 :(得分: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");