【问题标题】:DataTable Modifies Date Format - WHY?DataTable 修改日期格式 - 为什么?
【发布时间】:2015-08-23 19:52:06
【问题描述】:

所以我从我的表中发出一个类似SELECT * 的测试查询,其中的start_date 列具有Date 数据类型。然后将此查询制成一个 DataTable,然后将其转换为 CSV 文件。在 SSMS 中,查询仅返回日期,您可以在此处看到:

但是当我下载转换后的 CSV 文件时,日期是这样的:

我想知道的是为什么。为什么DataTable 会这样?我在DataTable的文档中找不到直接的答案。

这是在带有 SQL Server 2008 的 ASP.NET 4.0 C# 平台上。

谢谢!

【问题讨论】:

  • 这是因为在将数据表导出到您的csv文件时转换为字符串。

标签: c# sql asp.net sql-server datatable


【解决方案1】:

DataTable 使用 .NET DateTime 类,它可能会在创建 CSV 时使用DateTime.ToString() 方法转换为字符串。该方法使用当前线程文化设置中的日期格式。创建 CSV 时需要使用DateTime.ToString(string format)overload 指定所需的日期时间格式。

Here's.NET 平台上特定于文化的 DateTime 格式的一般描述。

【讨论】:

  • 只是想一想:您不能明确声明/强制将该列视为数据表中的 Date 而不是 DateTime 吗?
  • @cyberj0g 你能否将我链接到解释DataTable 使用DateTime 的文档?谢谢!
  • @Jeano Ermitaño 添加了答案链接。
  • @Mackan 不,.NET 基类库中没有 Date 类。日期由 DateTime 表示,时间设置为午夜。
  • 是的,但是有 DateTime.Date :)
【解决方案2】:

我认为这不是DataTable 问题。

T-SQL date type 映射到 DateTime CLR 数据类型。这意味着,即使这种类型在 SQL Server 中只包含日期部分,当您将其映射到 DateTime 时,它的时间部分将是 midnight默认情况下

除此之外,2015-06-176/17/2015 12:00:00 AM 值只是该值的不同文本表示。 文本表示取决于您当前的文化设置和/或 CSV 文件设置等。

【讨论】:

  • 所以你的意思是,默认情况下,SQL Server 中的Date 数据类型有12:00:00 AM,但是在查询时是隐藏的?我尝试将日期转换为 varchar(10),它在 CSV 中正确显示为日期。
  • 不在 SQL 服务器 @JeanoErmitaño 中。如果您指定 date,它会存储它。它在 c# 中添加时间部分,默认为 00:00:00/12:00:00AM
  • @Mackan 因此,当我将查询结果转换为 DataTable?
  • @JeanoErmitaño 在您的第二条评论中是的。使用 .NET DateTime 类型映射的 Sql Server Date 类型。当您从 SQL Server 的 DataTable、DataSet 等中获取它时,它将映射到 DateTime 类型。由于这仅保留日期部分,因此默认情况下时间部分将是午夜。 Date 在 SQL Server 中也保存为二进制文件。
猜你喜欢
  • 1970-01-01
  • 2014-12-26
  • 2016-03-11
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多