【问题标题】:A Datetime without time without string.format没有时间的 Datetime 没有 string.format
【发布时间】:2015-04-22 04:29:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • DateTime.ToShortDateString 怎么样?
  • @Eugène 这个属性只是将它的时间部分设置为午夜。它根本不会/不能删除它的时间部分。

标签: c# mysql .net datetime


【解决方案1】:

DateTime 始终包含日期和时间部分。如果您使用Date 属性,它会返回一个新的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

编辑:“所以这排除了ToString("") 格式。还有其他方法吗?”

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

将数据与显示方式分开很重要。如果您需要立即显示它使用上面的代码,您可以存储原始的DateTime变量以供将来处理,从数据库中再次选择它或使用DateTime.Parse/DateTime.ParseExcact从字符串中获取DateTime

【讨论】:

    【解决方案2】:

    “问题”是 .NET 中没有 Date 结构,您只有一个 DateTime 结构。这将始终包含日期和时间。您只能将其格式化为日期。

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

    【讨论】:

      【解决方案3】:

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

      如果你只想要 Date 部分,你可以得到它的字符串表示。您可以通过DateTime.ToString() 方法获取standard date and time formatcustom date and time format

      通常,您可以使用ShortDatePattern 仅获取使用CurrentCulturestandard "d" formatDate 部分的字符串表示形式。

      DateTime.Now.ToString("d");
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-07
          • 1970-01-01
          • 2014-12-04
          • 2017-05-20
          • 2012-03-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多