需要将时间跨度 ADO.NET 数据列格式化为 AM/PM

Posted

技术标签:

【中文标题】需要将时间跨度 ADO.NET 数据列格式化为 AM/PM【英文标题】:Need to format timespan ADO.NET datacolumn as AM/PM 【发布时间】:2012-08-22 17:43:59 【问题描述】:

我有一个 DataColulmn 类型为 TimeSpan 的 DataTable。它在 SQL Server 查询中填充了一个时间列,并在屏幕上显示为 24 小时格式。我想使用表达式列将其显示为 12 小时格式 + 上午/下午,但无法做到。 我尝试使用 convert to the column 来处理字符串,但它显示了一种奇怪的格式,例如 PT20H15(即 20:15 或 8:15 pm)。如果小时是一位或两位数,时间和小时的位置会发生变化,如果小时是 00,那么它会被删除,字符串处理似乎太复杂了。我尝试只比较“HourCol > 12”之类的列值,但这会引发关于将时间跨度与 int 进行比较的错误,所以我又失败了。有没有人有不同的建议?

提前致谢。

【问题讨论】:

ASP.NET、WinForms、WPF 还是其他?重要的是你如何做到这一点。 DateTime 值的显示方式取决于实际显示它的程序,而不是基础值。您可以在用于将其取出的 SQL 查询中将其转换为 varchar,但这并不总是最好的方法。 @David 我在 ASP.NET 页面的网格上显示数据。用户可以在单独的控件上编辑数据,然后我将这些值保存回 SQL Server。我宁愿有一个表达式列,这样我就不必进行双重转换,只需更新我的数据表上的原始列......如果可能的话。 【参考方案1】:

它显示了一个奇怪的格式,例如 PT20H15

这根本不是一种奇怪的格式。一段时间内是 ISO-8601 格式,对于TimeSpan 来说是相当合理的。

我想将其显示为 12 小时格式 + 上午/下午

听起来您在“一天中的某个时间”使用TimeSpan,老实说,这远非理想。我知道这是DateTime.TimeOfDay 给出的,但这只是因为框架没有“仅限时间”类型,运气不好。

有人有不同的建议吗?

您能否有一个计算列,它基本上是某个固定日期(甚至是DateTime.Today)+ 时间跨度值,并使用hh:mm tt 格式对其进行格式化? (您是否可以自己手动覆盖DataTable 中的值,而不是使用计算表达式?)

另一种选择是更改您的 SQL 查询以转换为日期/时间值,而不是在 DataTable 中进行。

【讨论】:

我选择了添加虚假日期的想法。谢谢!

以上是关于需要将时间跨度 ADO.NET 数据列格式化为 AM/PM的主要内容,如果未能解决你的问题,请参考以下文章

ADO.NET DataRow - 检查列是不是存在

使用 ADO.NET 命令向 VB 中的 SQL 表添加列

Pandas 将列格式化为货币

ADO.NET SqlCommand:无法将值 NULL 插入列

以日期时间格式查找两列数据之间的单个时间跨度,可能使用 for 循环

将一列字符串重新格式化为两个 [关闭]