【问题标题】:DateTime.Parse is dropping milliseconds from DataRow? [duplicate]DateTime.Parse 正在从 DataRow 中减少毫秒? [复制]
【发布时间】:2020-11-04 19:53:47
【问题描述】:

我在 SQL Server 中有一个名为 EntryTimeDATETIME 字段,其值为 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() 正在减少毫秒,我已经在我的即时窗口中确认了这一点:


为什么会丢弃毫秒数?

【问题讨论】:

  • 什么是row,它不会直接转换为DateTime
  • @ŇɏssaPøngjǣrdenlarp 更新了我的问题,指出它是一个DataRow,我在研究过程中了解到它已经被直接转换,这就是.ToString() 减少毫秒数的原因。跨度>
  • 提议的副本完全解决了另一个问题,并且仅暗示通过有根据的推理来回答这个问题,这使得未来的读者不清楚。

标签: c# string datetime parsing


【解决方案1】:

由于.ToString() 具体DateTime 对象上的工作方式,毫秒数正在减少。根据DateTime.ToString() 上的MSDN documentation(强调我的):

ToString() - 将当前 DateTime 对象的值转换为其等效值 字符串表示使用的格式约定 当前文化

这里,row["EntryTime"] 是一个object,但更重要的是,它是一个盒装的DateTime

因此,将其转换为字符串然后解析是不必要的。实际上,您应该确保row["EntryTime"] 的值不是DBNull.Value,然后通过显式转换为DateTime 来拆箱:

DateTime entryTime = DateTime.MinValue;
if (row["EntryTime"] != DBNull.Value)
    entryTime = (DateTime)row["EntryTime"];

这将为您提供DateTime 对象,其中Millisecond 属性仍然有效:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多