需要将时间跨度 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 SqlCommand:无法将值 NULL 插入列