如何从存储过程返回的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
相关产品推荐
相关产品推荐

