【问题标题】:Serialization: DateTime.Now VS DateTime from database序列化:来自数据库的 DateTime.Now VS DateTime
【发布时间】:2019-12-11 08:23:28
【问题描述】:

上下文:我正在序列化一些数据,其中包含我需要显示毫秒的日期。我正在使用 XmlSerializer 编写 XML 文件。我正在使用 DataTable 从数据库中获取一些数据。

我实际上在做什么:我是这样投日期的

CDate(dr("MyDate")).ToUniversalTime()

但是一旦序列化,这不包括毫秒。

在尝试一些解决方法时,我发现以相同的方式进行序列化

DateTime.Now.ToUniversalTime()

确实包括毫秒。

实际问题:在序列化 dr("MyDate") 时我应该怎么做才能包含毫秒?

请注意,VB.NET 或 C# 中的答案都被广泛接受。

【问题讨论】:

  • 您使用的是什么数据库,MyDate 列是什么数据类型
  • 数据库:Microsoft SQL Server 2016 SP1;列:DateTime2(3)
  • 如果对您有用,如果您使用的是 SQL Server,也可以使用FOR XML 为您做很多工作。
  • 您应该使用 DateTime2(7) 来存储更精确的日期时间值。 docs.microsoft.com/en-us/sql/t-sql/data-types/…
  • 我正在使用 DateTime2(3),因为我无法从进入数据库的提要中获得更准确的数据。

标签: c# xml vb.net datetime


【解决方案1】:

你检查过,CDate 包含什么?例如Definition of CDate 表明 CDate 只包含秒,而不是毫秒。当数据库中的原始时间以文本格式(以毫秒为单位)存储时,您应该使用 DateTime.TryParseExact(...) 来获取完整的时间值。否则,当数据库本身使用另一个DateTime类时,应直接使用该类型转换为日期时间。

【讨论】:

  • 您正在提供指向 C++ 参考的链接。顺便说一句,我确定 CDate 包括毫秒,因为 CDate(dr("MyDate")).ToString("o") 实际上显示了毫秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2023-03-21
相关资源
最近更新 更多