我有一个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());
答案 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");