我的日期和时间以 24 小时格式存储在数据库中。我所做的是使用存储过程来获取所需的日期和时间并插入数据表中。但在数据表中,它会自动转换为 12 小时格式。从数据表中获取数据后,可以将其转换为 24 小时模式,但必须转换为字符串。但问题是我需要使用数据来创建图表它只接受 DateTime 格式。所以我想要的是某种方式将 12 小时时间转换为 24 小时时间格式而不将其更改为字符串。请帮助。
3 回答
我的日期和时间以 24 小时格式存储在数据库中。
我希望它们实际上不是以任何文本格式存储的,而是以DateTime
字段或类似的形式存储。不要将“我在运行 SQL 查询时看到的内容”与“存储在数据库中的内容”混淆。正如数字不存储为十进制数字序列一样,日期和时间也不应该存储为文本。
但在数据表中,它会自动转换为 12 小时格式。
不,如果您已正确完成所有操作,则应该将所有内容存储DataTable
为DateTime
. 在调试器中,您可能会看到 12 小时的字符串表示,但对象本身应该是DateTime
.
基本上 12/24 小时问题只是真正问题的症状:不必要的字符串转换。追踪这些(并删除它们),其余的应该自己处理。ToString()
因此,如果您在从 中提取值时正在调用DataTable
,请停止这样做。相反,只需投射:
DateTime dateTime = (DateTime) row["foo"];
从您的故事中,我了解到DataTable
实际包含一个DateTime
值,该值本身没有任何格式,它基本上只存储自任意日期和时间以来的许多滴答声。您在表格可视化中看到的是默认ToString()
转换,基于应用程序的文化设置。
最有可能的是,如果你在运行现有代码之前做这样的事情,格式会改变:
var cultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);
cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss";
Thread.CurrentThread.CurrentCulture = cultureInfo;
我建议通过显式调用转换为您喜欢的格式ToString
。您将如何最好地实现这一点取决于您如何可视化来自DataTable
.
@Jon 说的都是对的。
但是,如果您只是错误地解释了自己,并且您DateTime
的数据库中确实有对象,并且您希望仅在显示时将其格式化为 24 小时- 您可以将字符串格式的“HH”用于 24 小时格式。
例如,对于myDateTime
表示 16:00:
var hourPart = String.Format("{0:HH}", myDateTime)
Console.WriteLine(hourPart); // prints 16, and not 4PM.