C# DateTime.Parse正在从DataRow中删除毫秒?
我在SQL Server中有一个名为C# DateTime.Parse正在从DataRow中删除毫秒?,c#,string,datetime,parsing,C#,String,Datetime,Parsing,我在SQL Server中有一个名为EntryTime的DATETIME字段,其值为2020-11-04 18:55:19.437。如您所见,毫秒元素的值为437。但是,如果我从我的DataRow解析此值: DateTime entryTime = DateTime.MinValue; if (row["EntryTime"] != DBNull.Value) entryTime = DateTime.Parse(row["EntryTime"]?
EntryTime
的DATETIME
字段,其值为2020-11-04 18:55:19.437
。如您所见,毫秒元素的值为437
。但是,如果我从我的DataRow
解析此值:
DateTime entryTime = DateTime.MinValue;
if (row["EntryTime"] != DBNull.Value)
entryTime = DateTime.Parse(row["EntryTime"]?.ToString());
然后我得到除毫秒值以外的所有值
我在这里的假设是.ToString()
正在降低毫秒数,我已经在即时窗口中确认:
为什么要删除毫秒?之所以删除毫秒,是因为
.ToString()
特别是在DateTime
对象上的工作方式。根据DateTime.ToString()
(我的重点):
ToString()
-
将当前DateTime对象的值转换为其等效值
使用
当前文化
这里,行[“EntryTime”]
是一个对象
,但更重要的是,它是一个装箱的日期时间
:
DateTime entryTime = DateTime.MinValue;
if (row["EntryTime"] != DBNull.Value)
entryTime = (DateTime)row["EntryTime"];
因此,无需将其转换为字符串,然后对其进行解析。实际上,您应该确保行[“EntryTime”]
的值不是DBNull.value
,然后通过显式强制转换为DateTime
,取消对值的装箱:
DateTime entryTime = DateTime.MinValue;
if (row["EntryTime"] != DBNull.Value)
entryTime = (DateTime)row["EntryTime"];
这将为您提供DateTime
对象,该对象的毫秒
属性仍然有效:
什么是
行
它不会直接转换成日期时间
?@ssaPøngjǣrdenlarp更新了我的问题,指出它是一个数据行
,我在研究过程中了解到它已经被直接转换了,这就是.ToString()的原因
减少了毫秒数。提议的复制品完全解决了另一个问题,仅通过受过教育的推理暗示了这个问题的答案,这使得未来的读者不清楚。