c#((DateTime)对象)vs DateTime.Parse
我是c#的新手 我有一个SQLite表,其中包含“marketDate”字段(数据类型Date),我正在使用SQLiteDataReader 我需要这样构建一个字符串:2016-01-03星期一 到目前为止,我找到了两种方法: (一) (二) 我想知道哪种方法是最好的(最佳实践),如果有人能给我解释一下这两种方法datetime.parse和(datetime)object)之间的区别,我将不胜感激。我找不到关于第二个的任何信息c#((DateTime)对象)vs DateTime.Parse,c#,sqlite,datetime,date-conversion,C#,Sqlite,Datetime,Date Conversion,我是c#的新手 我有一个SQLite表,其中包含“marketDate”字段(数据类型Date),我正在使用SQLiteDataReader 我需要这样构建一个字符串:2016-01-03星期一 到目前为止,我找到了两种方法: (一) (二) 我想知道哪种方法是最好的(最佳实践),如果有人能给我解释一下这两种方法datetime.parse和(datetime)object)之间的区别,我将不胜感激。我找不到关于第二个的任何信息 谢谢在您的第一个示例中,您做到了: 从日期时间(在对象中装箱)到字
谢谢在您的第一个示例中,您做到了:
日期时间
(在对象
中装箱)到字符串
的转换。对于此转换,必须创建一个字符串(内存保留)并填充,具体取决于当前区域性设置李>
字符串
转换回日期时间
。解析也基于当前区域性设置完成李>
这两个操作一起是一个相对(铸造)较长的过程。两次转换完成后,字符串将再次从内存中删除,因为不再需要它。感觉有点多余,对吧
在第二个示例中,您使用了一个cast。强制转换是一个相对简单的操作:它检查对象是否包含给定的类型。如果是,则返回该对象,否则抛出InvalidCastException
在这两个示例中,两个操作都重复两次。这样做一次会更快:
DateTime marketDate = (DateTime)reader["marketDate"];
myString = marketDate.ToString("dddd").ToUpper() + " " + marketDate.ToShortDateString();
如果要明确使用格式“yyyy-MM-dd”(并且不考虑文化背景),可以使用:
DateTime marketDate = (DateTime)reader["marketDate"];
myString = marketDate.ToString("dddd yyyy-MM-dd").ToUpper();
由于这是一项操作,您可以执行以下操作:
myString = ((DateTime)reader["marketDate"]).ToString("dddd yyyy-MM-dd").ToUpper();
在第一个示例中,您可以:
从日期时间
(在对象
中装箱)到字符串
的转换。对于此转换,必须创建一个字符串(内存保留)并填充,具体取决于当前区域性设置李>
然后将字符串
转换回日期时间
。解析也基于当前区域性设置完成李>
这两个操作一起是一个相对(铸造)较长的过程。两次转换完成后,字符串将再次从内存中删除,因为不再需要它。感觉有点多余,对吧
在第二个示例中,您使用了一个cast。强制转换是一个相对简单的操作:它检查对象是否包含给定的类型。如果是,则返回该对象,否则抛出InvalidCastException
在这两个示例中,两个操作都重复两次。这样做一次会更快:
DateTime marketDate = (DateTime)reader["marketDate"];
myString = marketDate.ToString("dddd").ToUpper() + " " + marketDate.ToShortDateString();
如果要明确使用格式“yyyy-MM-dd”(并且不考虑文化背景),可以使用:
DateTime marketDate = (DateTime)reader["marketDate"];
myString = marketDate.ToString("dddd yyyy-MM-dd").ToUpper();
由于这是一项操作,您可以执行以下操作:
myString = ((DateTime)reader["marketDate"]).ToString("dddd yyyy-MM-dd").ToUpper();
这:
从读取器获取日期(读取器[“marketDate”]
)。结果的类型为DateTime
此日期时间转换为字符串(.ToString()
)
此字符串被转换回日期时间(DateTime.Parse(…)
)
如您所见,步骤2和3是多余的,可以省略。这正是您的第二个代码示例所做的:
(DateTime)reader["marketDate"]
从读卡器读取日期(读卡器[“marketDate”]
)。这是当前的类型DateTime
,但编译器还不知道(因为读者的索引器返回超类型对象)。因此,通过显式强制转换,我们告诉编译器我们知道这是一个DateTime
。这允许我们对其调用特定于日期时间的方法
因为您询问了最佳实践:您的第二个示例比第一个好。然而,我的首选解决方案是使用:
这:
从读取器获取日期(读取器[“marketDate”]
)。结果的类型为DateTime
此日期时间转换为字符串(.ToString()
)
此字符串被转换回日期时间(DateTime.Parse(…)
)
如您所见,步骤2和3是多余的,可以省略。这正是您的第二个代码示例所做的:
(DateTime)reader["marketDate"]
从读卡器读取日期(读卡器[“marketDate”]
)。这是当前的类型DateTime
,但编译器还不知道(因为读者的索引器返回超类型对象)。因此,通过显式强制转换,我们告诉编译器我们知道这是一个DateTime
。这允许我们对其调用特定于日期时间的方法
因为您询问了最佳实践:您的第二个示例比第一个好。然而,我的首选解决方案是使用:
作为类型为Date
的marketDate
字段,您可以将其强制转换为DateTime
。然后以适当的方式获取其表示,使用以下方法:
((DateTime)reader["marketDate"]).ToString("dddd yyyy-MM-dd").ToUpper();
作为类型为Date
的marketDate
字段,您可以将其强制转换为DateTime
。然后以适当的方式获取其表示,使用以下方法:
((DateTime)reader["marketDate"]).ToString("dddd yyyy-MM-dd").ToUpper();
崩溃
想从这里发生的事情开始,帮助你更好地理解…这里发生的事情(应该想一个更好的表达方式)
Parse(对于这种情况,不是正确的方法)
在第一个示例中,我们首先关心的是:
reader["marketDate"].ToString()
因此,将数据作为字符串读取,非常棒,为了让我们的生活更轻松,让我们将其分配给一个变量,然后完成其余的工作
var str = reader["marketDate"].ToString();
var myStr = myString =
(DateTime.Parse(str)).ToString("dddd").ToUpper() + " "
+ (DateTime.Parse(str)).ToShortDateString();
这里,如果你看到这里发生了什么,在这个
从db表中获取列marketDate
的值
调用Date对象上的String,该对象生成日期值的字符串表示形式
对从日期对象创建的字符串使用Parse
再次调用ToString以获取所需的格式化字符串
那么,你在做双份工作
var dt = (DateTime)reader["marketDate"];
var myString = dt.ToString("dddd").ToUpper() + " " + marketDate.ToShortDateString();