Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SqlDataReader在C#中格式化日期_C#_Sql_Date Format - Fatal编程技术网

如何使用SqlDataReader在C#中格式化日期

如何使用SqlDataReader在C#中格式化日期,c#,sql,date-format,C#,Sql,Date Format,我有一个控制台项目,它从数据库中检索一些数据。它正在使用连接字符串。当我运行项目时,我得到的日期是1/1/2010 12:00:00 AM,但我只想得到日期,比如1/1/2010 代码如下所示: string sql = "SELECT * FROM Employees"; SqlCommand cmd = new SqlCommand(sql, sqlConnection); SqlDataReader dr = cmd.ExecuteReader(); // this is for

我有一个控制台项目,它从数据库中检索一些数据。它正在使用连接字符串。当我运行项目时,我得到的日期是
1/1/2010 12:00:00 AM
,但我只想得到日期,比如
1/1/2010

代码如下所示:

string sql = "SELECT * FROM Employees";

SqlCommand cmd = new SqlCommand(sql, sqlConnection);

SqlDataReader dr = cmd.ExecuteReader(); 

// this is for header
string _fname = "First Name"; 
string _lname = "Last Name"; 
string _dob = "DOB"; 

Console.WriteLine("{0} | {1} | {2}", _fname.PadRight(10), _lname.PadRight(10), _dob.PadRight(10));

while (dr.Read())
{
    Console.WriteLine("{0} | {1} | {2}",
                      dr["FirstName"].ToString().PadRight(10),
                      dr["LastName"].ToString().PadRight(10),
                      // Below is what I want to format.
                      dr["DOB"].ToString().PadRight(10)
}

dr.Close();
我试过:

dr["DOB"].ToString(MM-dd-yyyy).PadRight(10)

dr["DOB"].Date.ToString(MM-dd-yyyy).PadRight(10)
然而,它们都不起作用


使用数据库读取数据时,如何设置日期格式?

请使用下面的代码段进行尝试

旧代码:-

dr["DOB"].ToString().PadRight(10)
新代码:-

选择1

dr.GetDateTime(columnIndex).ToString("dd/MM/yyyy");
选择2

Convert.ToDateTime(dr["DOB"]).ToString("dd/MM/yyyy")

您需要首先将字符串值解析为DateTime。试试这样的

string datestr ="1/1/2010 12:00:00 AM";
DateTime dateTime;
var ds = DateTime.TryParse(datestr,out dateTime);
string outstr = dateTime.ToString("MM/dd/yyyy");
您可以使用来实现所需的格式。 您的代码可能如下所示:

var sql = "SELECT * FROM Employees";
var cmd = new SqlCommand(sql, sqlConnection);
SqlDataReader dr = cmd.ExecuteReader(); 
var _fname = "First Name";
var _lname = "Last Name"; 
var _dob = "DOB"; 
Console.WriteLine("{0} | {1} | {2}", _fname.PadRight(10),_lname.PadRight(10),_dob.PadRight(10));
while (dr.Read())
{
   dt = (DateTime)dt["DOB"];
   Console.WriteLine("{0} | {1} | {2}",
   dr["FirstName"].ToString().PadRight(10),
   dr["LastName"].ToString().PadRight(10),
   dt.ToString("MM/dd/yy").PadRight(10));
}
dr.Close();
dr[“DOB”]
的返回值可能是字符串,而不是日期。在这种情况下,您可以将其转换为日期,然后
.ToString(“MM/dd/yy”)
,或者只需找到“”的索引,然后按如下方式拆分字符串:

var str = (string)dr["DOB"]
Console.Write(str.Split(' ')[0]);

这将返回:
1/1/2010

您还可以从SQL转换它。 更新查询:

SELECT *, CONVERT(VARCHAR(10),DOB, 103) as FormattedDOB from Employees
还有你的c#:

你为什么不试试这个呢:

String.Format("{0:MM-dd-yyyy}", <YourDate>)
String.Format(“{0:MM-dd-yyyy}”,)

检查此项,我肯定希望OP不会将日期作为字符串存储在其数据库中。。。也许你应该问问他们,为什么会是一根绳子
SqlDataReader
返回装箱类型。@Probinand:索引器的声明类型是
object
,我希望结果是
DateTime
DateTimeOffset
。抱歉dr[“DOB”]是对象,需要强制转换为DateTime我将日期作为日期存储在数据库中。OP已经说过他们已经尝试过了-该代码不会编译,因为
对象
没有
ToString(string)
重载。@Jonsket当然不是,我们必须先强制转换。但取决于C的版本,这也不起作用,因为
dr[“DOB”]
可为空,只能强制转换到
对象?
。该代码仍然无法编译。包括一个真正的演员阵容,你可以提到
如果你认为C#8部分很重要,尽管我质疑你的说法,它无论如何都是可以为空的。我刚刚写了
DateTime dt=(DateTime)阅读器[“dob”]在C#8应用程序中,目标是.NETCore3.0,这很好。考虑到null值由
DBNull.Value
表示,我不知道为什么它可以为null。(如果以后要无条件地取消对值的引用,我通常强烈建议使用cast操作符,而不是
as
。InvalidCastException比NullReferenceException有用得多。)虽然这可以奏效,但我强烈建议在应用程序中而不是在数据库中执行所有表示逻辑。我只使用cast而不是使用
Convert.ToDateTime
——这样,如果OP确实有字符串表示,他们将通过错误快速发现,并可以适当调整代码。如果是字符串表示形式,
Convert.ToDateTime
可能会由于文化歧义而产生意外结果-例如,如果数据库今天返回2019年7月11日,但OP在英国机器上运行代码,
Convert.ToDateTime
将返回7月11日。(在我看来,调用
dr.GetDateTime
可能是最好的方法。)选项1起作用。我喜欢它,因为它简单易学!非常感谢。
String.Format("{0:MM-dd-yyyy}", <YourDate>)