没有时间的日期时间没有 string.format

A Datetime without time without string.format

我有一个 DataTable 来自我正在写入 excel 文件的存储过程。有一个数据类型为 DateTime 的列,查看其中的值,它们只是带有时间戳的通用日期。

我试过使用 DateTime.Date 属性,但它仍然给我一个时间戳。此外,我尝试使用 year,month,day 构造函数创建一个新的 DateTime 对象,但它仍然添加了一个时间戳:

DateTime newDate = DateTime(oldDate.Year, oldDate.Month, oldDate.Day);

我试图将列数据类型保持为 DateTime 但删除了时间戳,因此这排除了 ToString("") 格式。还有别的办法吗?

如果您指的是 timestamp 的时间部分,则 DateTime 实例 always 具有日期和时间部分。 DateTime.Date property 只是将时间值设置为午夜。

如果您只需要它的 Date 部分,您可以获得它的字符串表示形式。您可以使用 DateTime.ToString() 方法获得 standard date and time format or custom date and time format

通常,您可以使用 CurrentCultureShortDatePattern to get only string representation of Date part which uses standard "d" format

DateTime.Now.ToString("d");

顺便提一下,在 dotnet/corefx on GitHub 页面中有针对 .NET Framework 的 System.DateSystem.Time 类型的提案。

A DateTime 总是包含日期和时间部分。如果你使用 Date 属性 它 returns 一个新的 DateTime 时间是 0:00:00 所以在同一天的午夜。您需要不带时间的日期时间的字符串表示形式。

您可以使用 DateTime.ToString:

string result = oldDate.ToString("d"); // uses current culture's date format

string result = oldDate.ToShortDateString(); // same as above

string result = oldDate.ToString("MM-dd-yyyy"); // custom format

编辑:"so this rules out ToString("") formatting. Is there another way?"

不是,因为上面提到的原因。

将数据与其显示方式分开很重要。如果你需要在没有时间的情况下使用上面的代码显示它,你可以存储原始的 DateTime 变量以供将来处理,select 从数据库中再次使用它或使用 DateTime.Parse/DateTime.ParseExcact从字符串中获取 DateTime

你应该使用DateTime.Now.ToShortDateString();

'problem'是.NET中没有Date结构,只有DateTime结构。这将始终包含日期和时间。您只能将其格式化为日期。

或者,您当然可以编写自己的 struct 仅包含日期部分,或者放弃并使用 string.Format 将其格式化为日期(可能使用短日期字符串 d).