You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储过程返回的DateTime对象中提取日期?

解决从DataTable提取DateTime日期部分的问题

先给你梳理下问题出在哪,以及对应的解决办法:

1. 为什么.Date属性看起来没生效?

你看到的{3/19/2019 10:11:0000 AM}大概率是调试器的显示问题,或者你的存储过程返回的dateOfEvent字段本身不是DateTime类型(比如是字符串格式的日期时间)。

  • 如果字段是真正的DateTime类型,调用.Date后,这个DateTime对象的时间部分其实已经被设置为00:00:00了,只是调试器可能沿用了原始的显示格式。你可以通过输出dt1.Hour、dt1.Minute来验证,结果应该都是0。
  • 如果字段是字符串类型,Convert.ToDateTime转成DateTime后,.Date依然会生效,同样要注意调试显示的迷惑性。

2. ToString报错的原因

你用了单引号'MM/dd/yyyy',但C#中字符串字面量必须用双引号,单引号是用来定义单个字符的,所以会报“字面量中字符过多”的错误。正确写法是:

string dateOnly = dt1.ToString("MM/dd/yyyy");

3. 更稳妥的完整写法

如果不确定字段的类型,或者想避免转换异常,可以先做类型检查和安全转换:

// 先获取字段值,做空值检查
object dateValue = tableInfo.Rows[0]["dateOfEvent"];
if (dateValue != DBNull.Value)
{
    DateTime eventDate;
    // 尝试安全转换,避免格式错误抛出异常
    if (DateTime.TryParse(dateValue.ToString(), out eventDate))
    {
        // 获取仅日期的字符串结果
        string dateOnlyStr = eventDate.ToString("MM/dd/yyyy");
        // 或者如果需要DateTime类型(时间固定为00:00:00)
        DateTime dateOnlyDt = eventDate.Date;
    }
}

额外建议:从存储过程层面优化

如果你的存储过程返回的是带时间的DateTime,也可以直接在SQL里只返回日期部分,比如SQL Server中用CONVERT(date, dateOfEvent),这样DataTable里拿到的就是仅日期的类型,后续处理会更简单。

内容的提问来源于stack exchange,提问作者gwydion93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:22:09