1

我的日期和时间以 24 小时格式存储在数据库中。我所做的是使用存储过程来获取所需的日期和时间并插入数据表中。但在数据表中,它会自动转换为 12 小时格式。从数据表中获取数据后,可以将其转换为 24 小时模式,但必须转换为字符串。但问题是我需要使用数据来创建图表它只接受 DateTime 格式。所以我想要的是某种方式将 12 小时时间转换为 24 小时时间格式而不将其更改为字符串。请帮助。

4

3 回答 3

9

我的日期和时间以 24 小时格式存储在数据库中。

我希望它们实际上不是以任何文本格式存储的,而是以DateTime字段或类似的形式存储。不要将“我在运行 SQL 查询时看到的内容”与“存储在数据库中的内容”混淆。正如数字不存储为十进制数字序列一样,日期和时间也不应该存储为文本。

但在数据表中,它会自动转换为 12 小时格式。

不,如果您已正确完成所有操作,则应该将所有内容存储DataTableDateTime. 在调试器中,您可能会看到 12 小时的字符串表示,但对象本身应该是DateTime.

基本上 12/24 小时问题只是真正问题的症状:不必要的字符串转换。追踪这些(并删除它们),其余的应该自己处理。ToString()因此,如果您在从 中提取值时正在调用DataTable,请停止这样做。相反,只需投射:

DateTime dateTime = (DateTime) row["foo"];
于 2013-04-12T17:33:05.520 回答
2

从您的故事中,我了解到DataTable实际包含一个DateTime值,该值本身没有任何格式,它基本上只存储自任意日期和时间以来的许多滴答声。您在表格可视化中看到的是默认ToString()转换,基于应用程序的文化设置。

最有可能的是,如果你在运行现有代码之前做这样的事情,格式会改变:

var cultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);
cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss";
Thread.CurrentThread.CurrentCulture = cultureInfo;

我建议通过显式调用转换为您喜欢的格式ToString。您将如何最好地实现这一点取决于您如何可视化来自DataTable.

于 2013-04-12T17:46:50.353 回答
0

@Jon 说的都是对的。

但是,如果您只是错误地解释了自己,并且您DateTime的数据库中确实有对象,并且您希望仅在显示时将其格式化为 24 小时- 您可以将字符串格式的“HH”用于 24 小时格式。

例如,对于myDateTime表示 16:00:

var hourPart = String.Format("{0:HH}", myDateTime) 
Console.WriteLine(hourPart); // prints 16, and not 4PM.
于 2013-04-12T17:42:20.123 回答