我从SQL Server数据库中循环出reader.GetValue
,一切正常,但我在表中有一列数据类型Date
。当我查看表格中的数据时,它会正确显示日期'18 -Dec-17',没有时间。
reader
的输出格式为:'18 -Dec-17 12:00:00 AM'并且所有记录显示上午12:00:00相同,无论日期更改。< / p>
有人可以告诉我这里发生了什么,有没有选择删除或者我需要正则表达式还是替换它?
while (reader.Read())
{
while (cnt_field <= reader.FieldCount - 1)
{
db_output = db_output + "" + reader.GetValue(cnt_field) + " -\t ";
cnt_field++;
}//WEND
cnt_field = 0;
db_output = db_output + "\n\r";
}//WEND
答案 0 :(得分:4)
使用"" + reader.GetValue(...)
,您正在执行隐式reader.GetValue(...).ToString()
。
您看到的是DateTime
的默认表示。 dotNET没有单独的Date
类型。
因此,您必须检测循环内的DateTime值并应用所需的格式。
像
这样的东西while (cnt_field <= reader.FieldCount - 1)
{
object value = reader.GetValue(cnt_field);
if (value is DateTime)
db_output += ((DateTime)value).ToShortDateString(); // apply a std/custom Date format
else
db_output += value.ToString();
db_output += " -\t ";
....
}
答案 1 :(得分:2)
对reader.GetValue(cnt_field)
的调用返回表示日期的DateTime
(“装箱”为object
)。现在;在数据库和DateTime
中,日期时间值没有格式 - 它们只是日期/时间的原始数值。当您使用字符串连接时,将使用默认的.ToString()
,它将应用您当前的区域性和默认格式说明符。所以:如果不符合您的意图:您需要告诉它您的意图:
var when = (DateTime)reader.GetValue(cnt_field);
db_output = db_output + "" + when.ToString(chosenFormat) + " -\t ";
您可能还想明确指定文化 - CultureInfo.InvariantCulture
通常是记录等的好选择。
您可以选择standard format specifiers或custom format specifiers来构建所需的格式。您可能需要"dd-MMM-yy"
,所以:
db_output = db_output + "" + when.ToString("dd-MMM-yy") + " -\t ";